home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BBS Toolkit
/
BBS Toolkit.iso
/
rbbs_pc
/
173amrg.zip
/
173A-CHG.DOC
next >
Wrap
Text File
|
1990-08-26
|
365KB
|
8,748 lines
======[ Beta Test Version - Changes to RBBS-PC 17.3 ]========
Last Mod: KG082501
This is the chronological, detailed documentation of the changes
made to 17.3, for beta test sites.
SysOps: There is a new HELP07 to put with your other help
files. Needed to get help with commands at end of message
read.
SysOps: Older versions of CONFIG will not properly initialize
the modem because the modem firmware command now is sent out
exactly as stored in the DEF file and "AT" is not added to
the front. You need to edit your DEF file to add "AT" to
the "&W" to make it work properly.
SysOps: MODEMS.SET now has 2 additional parameters. A new
file is included.
Sysops: 17.3A now correctly supports macros in the Fast File
search, for both online and offline files. This allows efficient
implementation of many new features.
See the two enhanced utilities CMPBBS10.ZIP and
MFIDX11.ZIP for details. You can move your files off lines
and you can also list files on other BBS's.
CONVENTIONS:
The changes are assigned numbers that correspond to the
month, day, and order in which they were made. Any mods
are dated following the modification description. The
lines of source code that are changed/modified/added are
designated by the comment beginning in column 70 of "' iiMMDDnn"
where ii is the initials of the person providing the change, and
nn is the number of the change made that month (MM) and day (DD).
-------------------------------------------------------------------
RBBS-PC.EXE 02-11-90 7:00 PM EST Release of CPC17.3
--------------------------------------------------------------------
Summary
EXE MOD Short Description
---- -------- -----------------
CNFG KG082501 Might not find user's file when should
CNFG DA082501 CONFIG now decides where to put user/msg in conf/subboard
RBBS KG082401 Sometimes creating files 0 bytes long
both KG082301 BreakFileName fixed
RBBS ML082001 Text file displayed after door return sometimes not working
CNFG DA082105 Not capitalized macro extension
CNFG DA082104 Getting double extensions added to msg file backup
CNFG DA082103 Apply changed to RBBS-PC's BreakFileName to Config's
RBBS DA082101 BreakFileName subprogram make shorter and clearer
RBBS KG082102 "End Msgs" may be on end of line in T)opic scan
RBBS KG082101 Getting an error when use config to set no caller logging
RBBS KG082005 Erroneous msg logged to callers file when join/door
RBBS KG082004 End of file list prompt made less confusing
RBBS KG082003 Caller log message when exiting conference improved
RBBS KG082002 Newuser file not shown to new users in a subboard
RBBS KG082001 In FMS directory can V)iew file when lack security
RBBS KG081901 Novice prompt too long at end of msg read
RBBS KG081801 Local logon using ESC waits forever for response
RBBS KG081705 Some file names causing problems in join
RBBS KG081704 Category code selected by D)efault sometimes not put in
RBBS KG081703 Possible to get caught in loop in PUI when command invalid
RBBS KG081702 Puts "min left" on same line as subboard/conference name
RBBS KG081701 Corrects spelling in the text
RBBS KG081603 Nested submenus not working intuitively
RBBS KG081602 Not trapping error when can't create callers log
RBBS KG081601 Possible for K)ill to be incorrectly show in msg read
RBBS KG081501 In personal download "p *" gets "unable to access *"
RBBS KG081405 Display improved for reporting mail in conference scan
RBBS KG081404 Possible for info to scroll off in msg scan
CNFG KG081403 Code jumbled in appearance
CNFG KG081402 Help command prefix not being used properly
CNFG KG081401 Initialization of modem commands not consistent
RBBS XX081401 Not executing macro before an external protocol
RBBS KG081303 Restore help at end of message prompt
RBBS KG081302 Support "?" for help at the msg read prompt
RBBS KG081301 "T C" not stacking in utilities section
RBBS KG081201 File search by wildcard not obeying DOS convention
CNFG DA081006 No longer beep when do successful save
CNFG DA081005 Line feed removed from substitution for "{"
CNFG DA081004 Default secret name of SysOp changed
both DA081003 Version # of RBBS shortened by dropping "CPC" prefix
CNFG DA081002 Removes documentation of modem commands in source
CNFG DA081001 Cleans up code displaying page of modems
RBBS DA080903 Mark of new files in personal moved to end of file name
RBBS DA080902 Local status line display sometimes messed up
RBBS DA080901 J)oin option in V)iew not working after a jump
RBBS ML080802 Possible for time shortened and time left to be different
RBBS KG081002 Number of new files reported for new user wrong in subboard
CNFG KG081001 Code shortened and simplified
RBBS KG080905 Display of files in personal sometimes double spaces
CNFG KG080904 Final msg when save in config can be wrong
CNFG KG080903 Code simplified and shortened
CNFG KG080902 Clarify the prompt on exiting config
CNFG KG080901 Move initialization of modem commands to shared routine
RBBS ML080801 Sometimes not dropping to DOS when should
RBBS ML080601 Overwrite on upload not right when file here has diff. extension
CNFG DA080503 Show page of modem options in CONFIG
CNFG DA080502 When initialize firmware, show any modem response
CNFG DA080501 CONFIG sometimes won't work properly with 16550 Uart chip
RBBS KG080701 Possible to get loop in "view conference" command
RBBS KG080601 Change security basis for joining to logon security
RBBS KG080501 Possible in personal msg scan to omit mail from caller
RBBS KG080401 Library section not working right
CNFG KG080301 Code not consistently using standard message for none picked
both KG080101 Allow default extension for compressed files to be empty
RBBS DA080101 Msg when time shortened can be confusing
RBBS KG073104 "v c" after a join inside "v" not working right
CNFG KG073103 Possible to get untrapped error on display of config read
RBBS KGO73102 "R M 1+ C" interpreting "C" as text to search for
RBBS KG073101 User list never displaying user with blank password
RBBS KG073001 Autologoff not working right after insufficient time dwnld
RBBS MB073001 Sometimes password not hidden on logon
CNFG KG072902 Prompt on # seconds to delay before modem cmnd not right
RBBS KG072901 Sometimes not displaying all conferences in V)iew
CNFG KG072802 Not skipping right to next msg on a renumber
CNFG KG072801 Last msg read not reset right after a renumber of msgs
RBBS KG072702 Multi-file uploads skipped after 1st extended description
RBBS KG072701 Strings shortened
RBBS KG072606 Subboard count of new files, new bullets, news wrong
RBBS KG072605 View of block delete in msg edit made L)ist
RBBS KGP72604 Confusing msg when no doors installed
RBBS KG072603 Misleading msg on how to reset profile
CNFG KG072602 Resetting modem commands to default sets times to 0
both KG072601 Upper case converting more than a-z to A-Z
RBBS KG072102 Possible to get untrapped error when FIDXT.DEF empty
RBBS KG072101 Skip over previously viewed conferences in V)iew conf
RBBS DA071803 More appropriate msg when searching non-date sorted FMS dirs
RBBS DA071801 Code shortened and made more consistent
RBBS DA071702 Block of text selected for delete not automatically displayed
RBBS DA071701 Text made shorter, clearer, and more consistent
RBBS ML071502 Sometimes not displaying separate comments file right
RBBS ML071501 Extended description list not working right
RBBS ML062202 Possible to get "(R)(R)" in message subject
RBBS ML062201 Variable not set frequently enough
RBBS ML061905 Do not show To: From: when entering extended description
RBBS ML061904 Moves ques on msg protection after the save
RBBS KG071903 Allow H for a protocol. Support ? for help in proto choice.
RBBS KG071902 String shortened
RBBS KG071901 When download requests violates security, asks for missing file
RBBS KG071301 Various changes to reduce size of code
RBBS KG071202 "V C" at main menu interpreted as view & leave C)omment
RBBS KG071201 Not always finding macros in drive/path specified
RBBS DA071101 Possible to get erroneous msg that msg base full
RBBS KG071101 Can get msg about expiring registration when shouldn't
RBBS KG071001 Count of new files on logon sometimes not right
RBBS KG070901 Some commands in a stack being ignored
RBBS KG070601 Time/date last logged on sometimes not right in user record
CNFG KG062303 Conference mode header display not right
CNFG KG062302 Not clear in conference mode what user/msg file working on
CNFG KG062301 Need leading space on display of config parameter value
RBBS DA061001 Don't allow duplicate FIRST messages
CNFG DA061001 Set FIRST message to 1.
RBBS DA061002 Continue to convert Smart Text even when user presses key
RBBS DA060901 Allow TAB to be used in LINE EDITOR
RBBS KG061501 Stacked commands wrongly executed during a timelock
RBBS EC061301 Not correctly analyzing all file names
CNFG EC060601 Untrapped error when set required protocol for pers. dwld
RBBS KG061001 Error condition on individuation not handled properly
RBBS KG060903 Person with sysop status not notified of mail to sysop
RBBS KG060902 Msg to public name of sysop says user not found
RBBS KG060901 In msg entry, says will notify even when who to not found
CNFG KG060103 Check wrong for conflict btw individuation & dwnld ratios
RBBS KG060102 Version name of MiteSized version keeps getting longer
RBBS KG060101 Remote sysop name wrongly logged to callers file
RBBS MB052101 Color spilling over into "min left"
RBBS RC050901 Individuation not being restored on return from Doors
RBBS KG052901 Macros sometimes not working in PUI's
RBBS KG052702 Logging to callers file improved in local mode
RBBS KG052701 Time logged on not right in caller's file
RBBS KG052401 RBBS overwrites callers file entry on shell to door
RBBS KG052201 Support info stored in name field but not part of name
RBBS DA042401 Possible to get infinite loop in FMS search
RBBS KG051702 K)ill can be in msg prompt even though can't kill
RBBS TC051701 Join back to main from subboard in V)iew not working
RBBS MB051601 Subject of msg sometimes not prompted for
RBBS KG051501 Subject of msg not treated right when has lower case
RBBS KG042501 Block print in macros not working right
CNFG KG041702 Quote for command symbol messes up DEF file
RBBS KG041701 Doors not getting executed
RBBS ML041401 Infinite loop possible under NetBios
RBBS KG041103 Can get untrapped error when FMS directory not right
CNFG KG041101 Prompt for parameter 158 not clear
RBBS KG040902 Log of file transfers not right when dooring
RBBS KG040901 Not pausing when screen full on directory scans
RBBS KG032801 Macros associated with protocol not being executed
RBBS KG032601 Possible to get untrapped errors when have new user
RBBS KG032502 Adds support for hidden doors not on menu if in DOORS.DEF
RBBS KG032501 Registration door control ignored in DOORS.DEF
RBBS KG031801 Wrong directory sometimes shown
RBBS KG031501 Unable to cancel an upload
RBBS KK030901 Sometimes get overflow error
RBBS KG030801 Stops reporting in personal mail scan after a screen pause
RBBS KG030601 Constant recycling with "Connect Timeout"
CNFG KG030301 Confusing prompt for name of file shown on sec violation
RBBS KG030203 Msg scan reporting personal mail may not pause on full screen
RBBS KG030202 Color spills over into a prompt in personal download
RBBS KG030201 Display of message cannot be paused
RBBS KG030101 Mail V)iew function can show mail waiting wrong in current conf.
RBBS KG022702 Untrapped errors in LIT version with MIMPORT OFF
RBBS KG022701 Stacked commands sometimes not working properly
RBBS RH022501 Autodownload sometimes not reporting name properly
RBBS KG022301 Add support for macro processing for online files
RBBS KG022205 File name reported wiped out by macro processing
RBBS KG022204 Add ability to vary FFS macro processing
RBBS KG022203 Colors graphics door menu MENU05C bleeds on the right
RBBS KG022202 Up and downloads in distributed RBBS-PC.DEF may not work
RBBS KG022201 Jump no longer an option when V)iew in dir listing
RBBS KG022103 LIT merges not assigning new user security right
RBBS KG022102 LIT merges give compile error if SURVEY is OFF
RBBS KG022101 Not correctly tracking bytes downloaded when dooring
RBBS KG022001 Autodownload not working when extension not specified
RBBS KG021803 Macro assign sometimes picks up wrong value
RBBS KG021802 Macros in Fast File Search executed too frequently
RBBS KG021801 Internal code documentation missing some cases
RBBS KG021502 Logon into a conference can pick up a macro
RBBS KG021501 Prompt after end of macro is repeated twice
RBBS RH021501 Autodownload not working
Contributors include:
DA - Doug Azzarito
dd - Daryl Damon
DR - Dick Reed
EC - Ezra Conger
JM - John Morris
KG - Ken Goosens
KK - Kim Kodde
MB - Matthew Briggs
ML - Mark Lautenschlager
RC - Richard Couture
RH - Ray Horton
TC - Tom Collins
XX - Unidentified
------------------------[ KG082501 ]-------------------------
Problem: CONFIG not properly looking for user's file. Question
about whether to create a user's file not put clearly.
25100 CALL BRKFNAME (MAINUSR$,X1$,X2$,X3$,TRUE) ' DA082501
FILE$ = X1$ + CP$ + "U.DEF" ' DA082501
MAIN.USER.FILE$ = FILE$ ' DA082501
GOSUB 30000 ' DA082501
IF OKAY THEN _ ' DA082501
GOTO 25160 ' DA082501
FILE$ = CP$ + "U.DEF" ' KG082501
GOSUB 30000 ' DA082501
IF OKAY THEN _ ' DA082501
MAIN.USER.FILE$ = FILE$ : _ ' DA082501
GOTO 25160 ' DA082501
25142 CALL GETNUMYN ("Make a user's file for this conference?",AB) ' KG082501
IF AB THEN _
GOTO 25160
------------------------[ DA082501 ]-------------------------
Problem: SysOps thought that because CONFIG asked where conference
message files are that they could be put anywhere and RBBS should
find them, whereas normally they would go into the same place as
the main msg and user files.
Solution: Put new msg/user files where RBBS will find them. Look
where main is as well as in default drive.
Solution: Change CONFIG.BAS as follows:
12160 KEY OFF
'
' * IF A MESSAGE FILE EXISTS, READ IN THE PARAMETERS IN IT.
'
FILE$ = MAIN.MESSAGE.FILE$
GOSUB 30000
NO.OLD.FILE = FALSE
IF OKAY THEN _ ' IF MESSAGE FILE EXISTS, READ CHECKPOINT RECORD
GOTO 12170
NO.OLD.FILE = TRUE
A$ = "Message file " + MAIN.MESSAGE.FILE$ + " not found. Create new one"
CALL GETNUMYN (A$,AB)
IF NOT AB THEN _
IF CONFERENCE.MODE > 0 THEN _ ' DA082501
MAIN.MESSAGE.FILE$ = MAINMSG$ : _ ' DA082501
MAIN.USER.FILE$ = MAINUSR$ : _ ' DA082501
GOTO 12151 _ ' DA082501
ELSE _ ' DA082501
SYSTEM ' DA082501
CALLS.TODATE! = 0 ' FIRST MSG# -- 0
FIRST.USER.RECORD = 1 ' USERS file -- first record number
CURRENT.USER.COUNT = FIRST.USER.RECORD ' USERS file -- next available record number
HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF ' USERS file -- last record number
FIRST.MESSAGE.RECORD = 2+MAXIMUM.NUMBER.OF.NODES ' MESSAGES file -- first record of messages
NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD ' MESSAGES file -- next available record number
HIGHEST.MESSAGE.RECORD = 5 * MAX.ALLOWED.MSGS.FRM.DEF _
+ 1 _
+ MAXIMUM.NUMBER.OF.NODES ' MESSAGES file -- last record number
MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF ' MESSAGES file -- maximum number of messages
B1 = MAXIMUM.NUMBER.OF.NODES
B3! = HIGHEST.MESSAGE.RECORD
GOSUB 22080
GOSUB 30450 ' UPDATE CHECKPOINT RECORD
25090 CALL BRKFNAME (MAINMSG$,X1$,X2$,X3$,TRUE) ' DA082102
FILE$ = X1$ + CP$ + "M.DEF" ' DA082102
MAIN.MESSAGE.FILE$ = FILE$ ' DA082501
GOSUB 30000 ' DA082501
IF OKAY THEN _ ' DA082501
GOTO 25100 ' DA082501
CALL BRKFNAME (CONFERENCE.MENU$,X1$,X2$,X3$,TRUE) ' DA082501
FILE$ = X1$ + CP$ + "M.DEF" ' DA082501
GOSUB 30000 ' DA082501
IF OKAY THEN _ ' DA082501
MAIN.MESSAGE.FILE$ = FILE$ ' DA082501
25100 CALL BRKFNAME (MAINUSR$,X1$,X2$,X3$,TRUE) ' DA082501
FILE$ = X1$ + CP$ + "U.DEF" ' DA082501
MAIN.USER.FILE$ = FILE$ ' DA082501
GOSUB 30000 ' DA082501
IF OKAY THEN _ ' DA082501
GOTO 25160 ' DA082501
FILE$ = CP$ + "M.DEF" ' DA082501
GOSUB 30000 ' DA082501
IF OKAY THEN _ ' DA082501
MAIN.USER.FILE$ = FILE$ : _ ' DA082501
GOTO 25160 ' DA082501
25144 CONFERENCE.MODE = 2
MAIN.USER.FILE$ = MAINUSR$ ' DA082501
GOTO 25170
25160 CONFERENCE.MODE = 1 ' DA082501
UG = 0
------------------------[ KG082401 ]-------------------------
Problem: The assembler routine that is supposed to check for
a file's existence can in some cases create a file with 0 bytes
in it. Happens if have a bulletin menu with 8 characters in it
when you ask for a bulletin to be displayed.
Solution: Change RBBSSUB4.BAS as follows:
59530 ZWasZ$ = ZUserIn$(ZAnsIndex)
CALL AllCaps (ZWasZ$)
IF INSTR(ReturnOn$,ZWasZ$) THEN _ 'check whether calling pgm wants
EXIT SUB
IF INSTR("LH?",ZWasZ$) THEN _ 'check whether caller wants help
GOTO 59515
IF INSTR(ZWasZ$,".") > 0 THEN _
GOTO 59532
CALL BadFile (ZWasZ$,WasBF) ' KG081705
IF WasBF > 1 THEN _ ' KG081705
GOTO 59532 ' KG081705
FPre$ = MenuFront$ ' check for sub-option ' KG081603
CALL BadFile (FPRE$ + ZWasZ$,WasBF) ' KG082401
ZOK = ZFalse ' KG082401
IF WasBF < 2 THEN _ ' KG082401
VerifyInMenu = ZFalse : _ ' KG082401
GOSUB 59538 ' KG082401
VerifyInMenu = PassedVerifyInMenu ' KG082005
IF NOT ZOK THEN _ ' KG081603
FPre$ = FrontOpt$ : _ ' check standard option ' KG081603
GOSUB 59538 : _
IF NOT ZOK THEN _ ' check option where menu is ' KG081603
FPre$ = MenuDrv$ : _ ' KG081603
GOSUB 59538
IF NewMenu THEN _
NewMenu = ZFalse : _
GOTO 59515
IF ZOK THEN _
EXIT SUB
------------------------[ KG082301 ]-------------------------
Problem: Program to break file name into components wrong
sometimes when have only a drive/path, e.g. "C:\TEXT\"
treated as having "TEXT" as file prefix and not part of drive/path.
Also, then not breaking apart to join together, was omitting parts
of drive/path when shouldn't be, such as "a:\" to "a:".
Solution:
Change RBBSSUB5.BAS as follows:
(line 63300)
SUB BreakFileName (PassedFileSpec$,DrvPath$,Prefix$,Extension$,ForJoining) STATIC ' KG081705
FileSpec$ = PassedFileSpec$ ' KG081705
CALL AllCaps (FileSpec$)
DrvPath$ = ""
Prefix$ = ""
Extension$ = "" ' KG082301
WasL = LEN(FileSpec$)
IF WasL < 1 THEN _
EXIT SUB
CALL FindLast (FileSpec$,"\",WasX,WasY)
IF WasX < 1 THEN _
IF MID$(FileSpec$,2,1) = ":" THEN _
DrvPath$ = LEFT$(FileSpec$,2) : _ ' DA082101
ZWasS = 3 _
ELSE ZWasS = 1 _
ELSE DrvPath$ = LEFT$(FileSpec$,WasX) : _ ' DA082101
ZWasS = WasX + 1 ' DA082101
WasX = INSTR(ZWasS,FileSpec$ + ".",".") ' EC061301
IF WasX < WasL THEN _
Extension$ = MID$(FileSpec$,WasX) ' DA082101
IF ZWasS <= WasL THEN _
IF WasX >= ZWasS THEN _
Prefix$ = MID$(FileSpec$,ZWasS,WasX - ZWasS)
IF ForJoining THEN _ ' DA082101
EXIT SUB
IF WasY > 1 THEN _ ' KG082301
DrvPath$ = LEFT$(DrvPath$, LEN(DrvPath$) - 1) ' DA082101
IF LEN(Extension$) > 0 THEN _
Extension$ = MID$(Extension$, 2) ' DA082101
END SUB
Change CNFG-SUB.BAS as follows:
61830 CALL ALLCAPS (FLNAME$) ' DA082103
DRVPATH$ = ""
PREFIX$ = ""
EXTENSION$ = "" ' KG082301
L = LEN(FLNAME$) ' DA082103
IF L < 1 THEN _ ' DA082103
EXIT SUB
CALL FINDLAST (FLNAME$,"\",X,Y) ' DA082103
IF X < 1 THEN _
IF MID$(FLNAME$,2,1) = ":" THEN _ ' DA082103
DRVPATH$ = LEFT$(FLNAME$, 2): _ ' DA082101
S = 3 _
ELSE S = 1 _
ELSE DRVPATH$ = LEFT$(FLNAME$,X) : _ ' DA082101
S = X + 1
X = INSTR(FLNAME$+".",".")
IF X < L THEN _ ' DA082103
EXTENSION$ = MID$(FILENAME$,X) ' DA082101
IF S <= L THEN _ ' DA082103
IF X >= S THEN _ ' DA082103
PREFIX$ = MID$(FLNAME$,S,X - S) ' DA082103
IF FOR.JOINING THEN _ ' DA082101
EXIT SUB
IF Y > 1 THEN _ ' KG082301
DRVPATH$ = LEFT$(DRVPATH$, LEN(DRVPATH$) - 1) ' DA082101
IF LEN(EXTENSION$) > 0 THEN _
EXTENSION$ = MID$(EXTENSION$, 2) ' DA082101
END SUB
------------------------[ ML082001 ]-------------------------
Problem: DOORS.DEF lets you specify a text file to display after
returning from a door. The display is erratic and sometimes does
not work properly.
Solution: Read in user's preferences before text displayed.
Change RBBS-PC.BAS as follows:
900 ZNewUser = ZFalse
ActionFlag = (ZLogonMailLevel$ = "S")
LogonMailNew = (ZLogonMailLevel$ = "N")
GOSUB 1895
IF ZActiveUserName$ = "SYSOP" AND NOT ZSysop THEN _
ZActiveUserName$ = ZOrigUserName$
LogonMailNew = ZFalse
ZSubParm = 2
CALL Line25
ZSection$ = " "
ZOutTxt$ = ""
IF (NOT ZConfMode) AND (NOT SubBoard) AND NOT TurboLogon THEN _
MailCheckConfirm = ZTrue : _
ZNonStop = ZTrue : _
GOSUB 5800
MailCheckConfirm = ZFalse
ZWasQ! = MinsInDoors * 60
IF ZExitToDoors and ZDooredTo$ <> "" THEN _ ' ML082001
CALL BufFile (ZOutTxt$(7),WasX) ' ML082001
ZExitToDoors = ZFalse
GOSUB 2350
IF NOT ZPrivateDoor THEN _
GOTO 955
GOSUB 20165
CALL SetSection
ZPrivateDoor = ZFalse
GOTO 1205
Change RBBSSUB3.BAS as follows:
(line 44000)
SUB ReadProf STATIC
FIELD 1, 128 AS ZMsgRec$
GET 1,ZNodeRecIndex
ZReliableMode = VAL(MID$(ZMsgRec$,91,2))
MID$(ZMsgRec$,40,2) = "00"
ZEightBit = VAL(MID$(ZMsgRec$,42,2))
ZBPS = VAL(MID$(ZMsgRec$,44,2))
CALL CommInfo
ZBaudTest! = VAL(MID$(ZBaudRates$,(-5 * ZBPS),5))
ZUpperCase = VAL(MID$(ZMsgRec$,46,2))
ZNumDnldBytes! = CVS(MID$(ZMsgRec$,48,4)) ' KG022101
ZBatchTransfer = (MID$(ZMsgRec$,52,1) = "1")
ZWasGR = VAL(MID$(ZMsgRec$,53,2))
HourLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,65,1))),2),2)
MinLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,66,1))),2),2)
SecLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,67,1))),2),2)
ZTimeLoggedOn$ = HourLoggedOn$ + _
":" + _
MinLoggedOn$ + _
":" + _
SecLoggedOn$
ZTransferFunction = VAL(MID$(ZMsgRec$,74,1))
ZWasFT$ = MID$(ZMsgRec$,75,1)
ZTimeCredits! = 60!*CVI(MID$(ZMsgRec$,113,2)) ' KKG030901
ZDooredTo$ = MID$(ZMsgRec$,79,8)
CALL Trim (ZDooredTo$)
IF ZExitToDoors AND ZDooredTo$ <> "" THEN _
CALL OpenWork (2,ZDoorsDef$) : _
IF ZErrCode = 0 THEN _
CALL ReadParms (ZOutTxt$(),8,1) : _
WHILE ZErrCode = 0 AND ZOutTxt$(1) <> ZDooredTo$ : _
CALL ReadParms (ZOutTxt$(),8,1) : _
WEND : _
IF ZOutTxt$(1) = ZDooredTo$ THEN _
ZDoorSkipsPswd = (ZOutTxt$(6) <> "Y") ' ML082001
ZErrCode = 0
ZMenuIndex = VAL(MID$(ZMsgRec$,117,2))
ZCurPUI$ = MID$(ZMsgRec$,93,8)
CALL Remove (ZCurPUI$," ")
IF ZCurPUI$ <> "" THEN _
CALL BreakFileName (ZMainPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZTrue) : _
ZCurPUI$ = ZOutTxt$ + ZCurPUI$ + ZWasZ$
ZCustomPUI = (ZCurPUI$ <> "")
ZLocalUser = (MID$(ZMsgRec$,101,2) = ZCarriageReturn$ + ZCarriageReturn$) ' KG030601
ZLocalUserMode = VAL(MID$(ZMsgRec$,103,2))
ZHomeConf$ = MID$(ZMsgRec$,105,8)
ZAutoLogoffReq = (VAL(MID$(ZMsgRec$,115,1)) <> 0)
CALL Trim (ZHomeConf$)
IF ZRequiredRings > 0 AND _
INSTR(ZModemInitCmd$,"S0=255") THEN _
COLOR 7,0,0 _
ELSE COLOR ZFG,ZBG,ZBorder
IF ZLocalUserMode THEN _
GOTO 44003
CALL SetBaud
------------------------[ DA082105 ]-------------------------
Problem: When enter macro extension in config, not capitalized.
Solution: Change CONFIG.BAS as follows:
15862 A$ = "File extension for macro files (3 chars required)"
CALL ASKRO (A$,24,MACRO.EXTENSION$)
IF LEN(MACRO.EXTENSION$) <> 3 THEN _
GOTO 15862
CALL ALLCAPS(MACRO.EXTENSION$) ' DA082105
RETURN
------------------------[ DA082104 ]-------------------------
Problem: When message file has an extension (e.g. DEF), the backup
file names has "BAK" added to the extension.
Change CONFIG.BAS as follows:
15460 GOSUB 17340
MAIN.MESSAGE.FILE$ = HJ$
CALL BRKFNAME (HJ$,X1$,X2$,X3$,TRUE) ' DA082104
MAIN.MESSAGE.BACKUP$ = X1$ + X2$ + ".BAK" ' DA082104
MAINMSG$ = MAIN.MESSAGE.FILE$
RETURN
------------------------[ DA082103 ]-------------------------
Problem: Config has a version of program to break file name into
components. Not updated same as RBBS-PC's.
Change CNFG-SUB.BAS as follows:
(line 61810)
.
.
.
SUB BRKFNAME (FILENAME$,DRVPATH$,PREFIX$,EXTENSION$,FOR.JOINING) STATIC
FLNAME$ = FILENAME$ ' DA082103
61830 CALL ALLCAPS (FLNAME$) ' DA082103
DRVPATH$ = ""
PREFIX$ = ""
EXTENSION$ = ""
CALL TRIMTRAIL (FLNAME$,"\") ' DA082103
L = LEN(FLNAME$) ' DA082103
IF L < 1 THEN _ ' DA082103
EXIT SUB
CALL FINDLAST (FLNAME$,"\",X,Y) ' DA082103
IF X < 1 THEN _
IF MID$(FLNAME$,2,1) = ":" THEN _ ' DA082103
DRVPATH$ = LEFT$(FLNAME$, 2): _ ' DA082101
S = 3 _
ELSE S = 1 _
ELSE DRVPATH$ = LEFT$(FLNAME$,X) : _ ' DA082101
S = X + 1
X = INSTR(FLNAME$+".",".")
IF X < L THEN _ ' DA082103
EXTENSION$ = MID$(FILENAME$,X) ' DA082101
IF S <= L THEN _ ' DA082103
IF X >= S THEN _ ' DA082103
PREFIX$ = MID$(FLNAME$,S,X - S) ' DA082103
IF FOR.JOINING THEN _ ' DA082101
EXIT SUB
IF LEN(DRVPATH$) > 1 THEN _ ' DA082101
DRVPATH$ = LEFT$(DRVPATH$, LEN(DRVPATH$) - 1) ' DA082101
IF LEN(EXTENSION$) > 0 THEN _
EXTENSION$ = MID$(EXTENSION$, 2) ' DA082101
END SUB
------------------------[ DA082101 ]-------------------------
Problem: Routine to break file name into drive/path, prefix, and
extension is confusing, especially on when to add "\".
Change RBBSSUB5.BAS as follows:
63300 ' $SUBTITLE: 'BreakFileName - sub to split file name into components'
' $PAGE
'
' NAME -- BreakFileName
'
' INPUTS -- PARAMETER MEANING
' FileSpec$ FULL NAME OF FILE
' ForJoining True IF WANT PARTS FORMATTED FOR
' FORMING FILE NAMES
' OUTPUTS -- DrvPath$ DRIVE AND PATH
' Prefix$ PREFIX OF FILE NAME
' Extension$ EXTENSION OF FILE NAME
'
' (E.G. "C:\RBBS\ARCE.COM" HAS "C:\RBBS" AS DRIVE AND PATH,
' "ARCE" AS PREFIX OF THE FILE NAME, AND
' "COM" AS THE EXTENSION OF THE FILE NAME.
'
' JOINED FORMAT IS C:\RBBS\,ARCE,.COM
'
' PURPOSE -- To break a file name into its component parts
' of drive/path, prefix, and extension
'
'
SUB BreakFileName (PassedFileSpec$,DrvPath$,Prefix$,Extension$,ForJoining) STATIC ' KG081705
FileSpec$ = PassedFileSpec$ ' KG081705
CALL AllCaps (FileSpec$)
DrvPath$ = ""
Prefix$ = ""
Extension$ = ""
CALL TrimTrail (FileSpec$,"\")
WasL = LEN(FileSpec$)
IF WasL < 1 THEN _
EXIT SUB
CALL FindLast (FileSpec$,"\",WasX,WasY)
IF WasX < 1 THEN _
IF MID$(FileSpec$,2,1) = ":" THEN _
DrvPath$ = LEFT$(FileSpec$,2) : _ ' DA082101
ZWasS = 3 _
ELSE ZWasS = 1 _
ELSE DrvPath$ = LEFT$(FileSpec$,WasX) : _ ' DA082101
ZWasS = WasX + 1 ' DA082101
WasX = INSTR(ZWasS,FileSpec$ + ".",".") ' EC061301
IF WasX < WasL THEN _
Extension$ = MID$(FileSpec$,WasX) ' DA082101
IF ZWasS <= WasL THEN _
IF WasX >= ZWasS THEN _
Prefix$ = MID$(FileSpec$,ZWasS,WasX - ZWasS)
IF ForJoining THEN _ ' DA082101
EXIT SUB
IF LEN(DrvPath$) > 1 THEN _
DrvPath$ = LEFT$(DrvPath$, LEN(DrvPath$) - 1) ' DA082101
IF LEN(Extension$) > 0 THEN _
Extension$ = MID$(Extension$, 2) ' DA082101
END SUB
------------------------[ KG082102 ]-------------------------
Problem: The "End Msgs" may fail to be at the beginning of
a line in a topic scan, instead getting appended to the right
of a topic.
Solution: Change RBBS-PC.BAS as follows:
4650 CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) ' KG081404
CALL SkipLine (1) ' KG082102
CALL QuickTPut1 ("--End Msgs--") ' KG081404
RETURN
------------------------[ KG082101 ]-------------------------
Problem: When use CONFIG to set caller's file in a subboard,
and specify a drive/path with a path but answer No to the
question whether want to log to a caller's file, get fatal
error when try to join that subboard.
Solution: Change RBBSSUB5.BAS as follows:
(line 63300)
SUB BreakFileName (PassedFileSpec$,DrvPath$,Prefix$,Extension$,ForJoining) STATIC ' KG081705
FileSpec$ = PassedFileSpec$ ' KG081705
CALL AllCaps (FileSpec$)
DrvPath$ = ""
Prefix$ = ""
Extension$ = ""
WasL = INSTR(FileSpec$,"\\") ' KG082101
IF WasL > 0 THEN _ ' KG082101
FileSpec$ = LEFT$(FileSpec$,WasL) ' KG082101
WasL = LEN(FileSpec$)
IF WasL < 1 THEN _
EXIT SUB
CALL FindLast (FileSpec$,"\",WasX,WasY)
IF WasX < 1 THEN _
IF MID$(FileSpec$,2,1) = ":" THEN _
DrvPath$ = LEFT$(FileSpec$,1) : _
ZWasS = 3 _
ELSE ZWasS = 1 _
ELSE DrvPath$ = LEFT$(FileSpec$,WasX-1) : _
ZWasS = WasX + 1 : _
IF WasY = 1 THEN _
DrvPath$ = DrvPath$ + "\"
WasX = INSTR(ZWasS,FileSpec$ + ".",".") ' EC061301
IF WasX < WasL THEN _
Extension$ = MID$(FileSpec$,WasX + 1)
IF ZWasS <= WasL THEN _
IF WasX >= ZWasS THEN _
Prefix$ = MID$(FileSpec$,ZWasS,WasX - ZWasS)
IF NOT ForJoining THEN _
EXIT SUB
IF LEN(DrvPath$) = 1 THEN _
IF DrvPath$ <> "\" THEN _
DrvPath$ = DrvPath$ + _
":"
IF INSTR(DrvPath$,"\") > 0 AND RIGHT$(DrvPath$,1) <> "\" THEN _
DrvPath$ = DrvPath$ + _
"\"
IF LEN(Extension$) > 0 THEN _
Extension$ = "." + _
Extension$
END SUB
------------------------[ KG082005 ]-------------------------
Problem: Can get message logged to callers file that an option
was found on menu but not found (on disk) when joining a conference
or dooring, but actually did find conference or door.
Solution: Change RBBSSUB4.BAS as follows:
(line 59500)
SUB SubMenu (PassedPrompt$,CurMenu$,FrontOpt$, _
BackOpt$,ReturnOn$,GRDefault$,PassedVerifyInMenu, _' KG082005
AllMenuOK,RequireInMenu,BackOpt2$,InMenu) STATIC ' KG032502
59530 ZWasZ$ = ZUserIn$(ZAnsIndex)
CALL AllCaps (ZWasZ$)
IF INSTR(ReturnOn$,ZWasZ$) THEN _ 'check whether calling pgm wants
EXIT SUB
IF INSTR("LH?",ZWasZ$) THEN _ 'check whether caller wants help
GOTO 59515
IF INSTR(ZWasZ$,".") > 0 THEN _
GOTO 59532
CALL BadFile (ZWasZ$,WasBF) ' KG081705
IF WasBF > 1 THEN _ ' KG081705
GOTO 59532 ' KG081705
FPre$ = MenuFront$ ' check for sub-option ' KG081603
VerifyInMenu = ZFalse ' KG082005
GOSUB 59538
VerifyInMenu = PassedVerifyInMenu ' KG082005
IF NOT ZOK THEN _ ' KG081603
FPre$ = FrontOpt$ : _ ' check standard option ' KG081603
GOSUB 59538 : _
IF NOT ZOK THEN _ ' check option where menu is ' KG081603
FPre$ = MenuDrv$ : _ ' KG081603
GOSUB 59538
IF NewMenu THEN _
NewMenu = ZFalse : _
GOTO 59515
IF ZOK THEN _
EXIT SUB
59540 WasX$ = FPre$ + _
ZWasZ$ + _
".MNU" 'check whether option is a menu
ZFileName$ = WasX$
CALL Graphic (GRDefault$,ZFileName$)
IF ZOK THEN _
NewMenu = ZTrue : _
CurMenuVer$ = ZFileName$ : _
CurMenu$ = WasX$ : _
CALL BreakFileName (CurMenu$,MenuDrv$,WasX$,ZWasDF$,ZTrue) : _
MenuFront$ = MenuDrv$ + WasX$ ' KG082005
RETURN
59547 CALL QuickTPut1 ("No such option " + ZWasZ$)
ZLastIndex = 0
IF VerifyInMenu AND InMenu AND NOT RequireInMenu THEN _ ' KG082005
CALL UpdtCalr("Option " + ZWasZ$ + " on menu " + _ ' KG082005
CurMenu$ + " but not found",1) ' KG082005
RETURN
------------------------[ KG082004 ]-------------------------
Problem: The "End list... download what?" prompt invites the
response "d file1 ... ". Better to say "file(s) to download"
and more consistent with prompt elsewhere.
Solution: Change RBBSSUB5.BAS as follows:
20159 IF ZAnsIndex < ZLastIndex THEN _
GOTO 20155
ZSearchingAll = ZFalse
CALL CmdStackPushPop (1)
ZLastIndex = 0
IF ZNo OR (ZFileNameHold$ = ZDirPrefix$) THEN _
GOTO 20155
CALL QuickTPut (ZEmphasizeOff$,0)
ZOutTxt$ = "End list. R)elist, [Q]uit, or file(s) to dwnld" ' KG082004
ZStackC = ZTrue
GOSUB 21668
CALL AllCaps (ZUserIn$(1))
IF ZUserIn$(1) = "R" THEN _
ZUserIn$(ZAnsIndex) = WasA1$ : _
GOTO 20161
IF LEN(ZUserIn$(1)) > 1 AND _
ZUserSecLevel >= ZOptSec(19 - 20 * (ZMenuIndex = 6)) THEN _
ZAnsIndex = 1 : _
GOSUB 20202
CALL CmdStackPushPop (2)
RETURN
------------------------[ KG082003 ]-------------------------
Problem: Called log distinguishes conference and subboard and
logs name when enter. But on exit says only "Exited Conference".
Solution: Make exit message consistent with entry. Change
RBBS-PC.BAS as follows:
5350 IF ZConfName$ <> "MAIN" THEN _
CALL QuickTPut1 ("Rejoining " + OrigMsgName$) ' KG082003
ConfFileName$ = OrigMsgName$
ZNewsFileName$ = OrigNewsFileName$
TurboLogon = ZTrue
ZWasQ = 0
ZInConfMenu = ZTrue
IF ZActiveUserName$ = "SYSOP" THEN _
ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ : _
CALL Trim (ZActiveUserName$)
ZConfigFileName$ = ZOrigCnfg$
CALL ReadDef (ZConfigFileName$)
IF ZOrigMsgFile$ <> ZActiveMessageFile$ THEN _
ZActiveMessageFile$ = ZOrigMsgFile$ : _
GOSUB 5343
IF ZOrigUserFile$ <> ZActiveUserFile$ THEN _
GOSUB 5380 : _
ZActiveUserFile$ = ZOrigUserFile$ : _
ZActiveUserName$ = ZOrigUserName$ : _
GOSUB 12598 : _
GOSUB 12990 : _
IF Found THEN _
GOSUB 9500 : _
ZMainUserFileIndex = ZUserFileIndex : _
CALL SetPrompt : _
CALL XferType (2,ZTrue) _
ELSE ZUserFileIndex = 0 : _
ZMainUserFileIndex = 0
CALL UpdtCalr ("Exited " + ZConfName$,2) ' KG082003
ZConfName$ = "MAIN" ' KG082003
GOSUB 2350
ZUplds = ZGlobalUplds
ZDnlds = ZGlobalDnlds
ZDLToday! = ZGlobalDLToday!
ZBytesToday! = ZGlobalBytesToday!
ZDLBytes! = ZGlobalDLBytes!
ZULBytes! = ZGlobalULBytes!
------------------------[ KG082002 ]-------------------------
Problem: New user file in a subboard never being shown to new users.
Solution: Change RBBS-PC.BAS as follows:
178 IF NOT SubBoard THEN _ ' KG082002
RETURN ' KG082002
IF ZNewUser THEN _ ' KG082002
GOSUB 758 ' KG082002
IF ZFirstName$ = ZSysopFirstName$ AND _
ZLastName$ = ZSysopLastName$ THEN _
RETURN 832 _
ELSE RETURN 790 ' KG082002
735 ZBypassTimeCheck = ZTrue
GOSUB 758 ' KG082002
755 IF ZPrivateDoor THEN _
ZUserIn$ = ZPswd$ : _
ZWasZ$ = ZUserIn$ : _
RETURN
GOSUB 12800
ZOutTxt$ = "Re-Enter password for Verification" ' DA071701
GOSUB 45010
SWAP ZWasZ$,ZUserIn$
CALL AllCaps (ZWasZ$)
IF ZUserIn$ <> ZWasZ$ THEN _
CALL QuickTPut1 ("Passwords Don't Match!") : _
GOTO 755
RETURN ' KG082002
758 CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) ' KG082002
CALL Line25
ZFileName$ = ZNewUserFile$
ZStopInterrupts = ZTrue
GOSUB 1790
CALL SkipLine(1)
RETURN ' KG082002
------------------------[ KG082001 ]-------------------------
Problem: When lack security to execute v)iew files command, still
see and can execute V)iew inside FMS listing.
Solution: Change RBBSSUB3.BAS as follows:
(line 58165)
SUB DispUpDir (PassedCats$,SearchString$, _
SearchDate$,DnldFlag,AbortIndex) STATIC
CALL AllCaps (SearchString$)
Blank$ = " "
ZStopInterrupts = ZFalse
ZLastIndex = 0
Categories$ = "," + _
PassedCats$ + _
","
CanDnld = (ZUserSecLevel => ZOptSec(19))
CanView = (ZUserSecLevel => ZOptSec(26)) ' KG082001
ZJumpSupported = ZTrue
ZJumpSearching = ZFalse
GOSUB 58185
IF DnldFlag > 0 THEN _
UpldIndex = DnldFlag : _
DnldFlag = 0 : _
GOTO 58180
ZJumpLast$ = ""
SearchFor$ = SearchString$
ExtraPrompt$ = LEFT$(",V)iew",-(6+4*ZExpertUser)*CanView) ' KG082001
IF CanDnld THEN _
IF ZTurboKeyUser THEN _
ExtraPrompt$ = ExtraPrompt$ + ",D)ownload" _
ELSE ExtraPrompt$ = ExtraPrompt$ + ", file(s) to dwnld"
MaxPrint = ZPageLength - 1
BelowMinSec = (ZUserSecLevel < ZMinSecToView)
ZNonStop = ZNonStop OR (ZPageLength < 1)
FMSCheckPoint = 0
WildSearch = (INSTR(SearchString$,"?") > 0) _
OR (INSTR(SearchString$,"*") > 0)
58180 ZTurboKey = -ZTurboKeyUser
ZStackC = ZTrue
CALL AskMore (ExtraPrompt$, ZTrue, ZFalse,AbortIndex,ZFalse)
IF ZSubParm = -1 THEN _
GOTO 58183
IF ZNo THEN _
GOTO 58183
CALL AllCaps (ZUserIn$(1))
IF ZUserIn$(1) = "V" THEN IF CanView THEN _ ' KG082001
ZLastIndex = ZWasQ : _
ZAnsIndex = 1 : _
CALL GetArc : _
ZJumpSupported = ZTrue : _ ' KG022201
ZWasA = UpldIndex : _
GOSUB 58185 : _
UpldIndex = ZWasA : _
GOTO 58180
IF ZUserIn$(1) = "D" THEN IF CanDwld THEN _ ' KG082001
ZOutTxt$ = "Download what file(s)" : _
ZStackC = ZTrue : _
CALL PopCmdStack : _
IF ZWasQ = 0 THEN _
GOTO 58180
IF ZJumpSearching THEN _
PrevSearch$ = SearchFor$ : _
SearchFor$ = ZJumpTo$ _
ELSE SearchFor$ = SearchString$ : _
IF LEN(ZUserIn$(1)) > 1 THEN _
IF NOT ZYes AND CanDnld THEN _
CALL SkipLine (1) : _
DnldFlag = UpldIndex : _
ZLastIndex = ZWasQ : _
ZAnsIndex = 1 : _
EXIT SUB
IF ZNonStop THEN IF UpldIndex > 999 THEN _
IF (SearchDate$ = "" OR NOT ZExpertUser) THEN _
ZOutTxt$ = STR$(UpldIndex) + _
" lines left to search. Really go non-stop? (Y/[N])" : _
ZNoAdvance = ZTrue : _
ZTurboKey = -ZTurboKeyUser : _
ZSubParm = 1 : _
CALL TGet : _
CALL WipeLine (79) : _
ZNonStop = ZYes ' DA071803
GOTO 58168
------------------------[ KG081901 ]-------------------------
Problem: in novice mode the read prompt is longer than a line.
Change RBBS-PC.BAS as follows:
4601 WasA1$ = ",H)lp,R)eply,T)hread,=,+,-" + _ ' KG081901
MID$(",F)wd",1, - (UserInHeader OR CanChangeSec) * 5) + _
MID$(",K)ill",1, ShowKill * 6) + _ ' KG081601
MID$(",U)sr",1,- (ZUserSecLevel >= ZOptSec(54)) * 6) + _ ' KG081303
MID$(",S)ec",1, - CanChangeSec * 5)
------------------------[ DR081801 ]-------------------------
Problem: When use ESC to log on locally, RBBS will not time out
for input on user name. Not desirable since distracted SysOp can
unintentionally tie up a working node, and might be using ESC to get
on as regular user on a network.
Change RBBS-PC.BAS as follows:
822 LOCATE 24,1
CALL TakeOffHook
ZLocalUser = ZTrue
ZSnoop = ZTrue
ZSysop = ZTrue ' DR081801
ZBPS = -6
CALL CommInfo
CALL Muzak (2)
IF NOT ZEscapeInsecure THEN _
GOTO 345
ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$
ZFirstName$ = ZSysopPswd1$
ZLastName$ = ZSysopPswd2$
ZUserLogonTime! = TIMER
ZTimeLoggedOn$ = TIME$
ZLinesPrinted = 0
GOTO 457
------------------------[ KG081705 ]-------------------------
Problem: Some file names cause a problem in conference join, such
as "\".
Solution: (fix to a fix) Change RBBSSUB4.BAS as follows:
59530 ZWasZ$ = ZUserIn$(ZAnsIndex)
CALL AllCaps (ZWasZ$)
IF INSTR(ReturnOn$,ZWasZ$) THEN _ 'check whether calling pgm wants
EXIT SUB
IF INSTR("LH?",ZWasZ$) THEN _ 'check whether caller wants help
GOTO 59515
IF INSTR(ZWasZ$,".") > 0 THEN _
GOTO 59532
CALL BadFile (ZWasZ$,WasBF) ' KG081705
IF WasBF > 1 THEN _ ' KG081705
GOTO 59532 ' KG081705
FPre$ = MenuFront$ ' check for sub-option ' KG081603
GOSUB 59538
IF NOT ZOK THEN _ ' KG081603
FPre$ = FrontOpt$ : _ ' check standard option ' KG081603
GOSUB 59538 : _
IF NOT ZOK THEN _ ' check option where menu is ' KG081603
FPre$ = MenuDrv$ : _ ' KG081603
GOSUB 59538
IF NewMenu THEN _
NewMenu = ZFalse : _
GOTO 59515
IF ZOK THEN _
EXIT SUB
59538 FilName$ = FPre$ + ZWasZ$ ' KG081705
ZFileName$ = FilName$ + _
BackOpt$
CALL Graphic (GRDefault$,ZFileName$)
IF NOT ZOK THEN _
IF BackOpt2$ <> "" THEN _
ZFileName$ = FilName$ + _
BackOpt2$ : _
CALL Graphic (GRDefault$,ZFileName$)
IF ZOK THEN _
IF ZSysop OR (NOT RequireInMenu) THEN _
RETURN _
ELSE CALL WordInFile (CurMenu$,ZWasZ$,InMenu) : _ ' KG032502
IF InMenu THEN _ ' KG032502
RETURN _
ELSE GOTO 59540
IF (NOT VerifyInMenu) THEN _
GOTO 59540
CALL WordInFile (CurMenu$,ZWasZ$,InMenu) 'verify against menu itself ' KG032502
IF InMenu THEN _ ' KG032502
IF AllMenuOK THEN _
RETURN
Change RBBSSUB5.BAS as follows:
SUB BreakFileName (PassedFileSpec$,DrvPath$,Prefix$,Extension$,ForJoining) STATIC ' KG081705
FileSpec$ = PassedFileSpec$ ' KG081705
CALL AllCaps (FileSpec$)
DrvPath$ = ""
Prefix$ = ""
Extension$ = ""
CALL TrimTrail (FileSpec$,"\")
WasL = LEN(FileSpec$)
IF WasL < 1 THEN _
EXIT SUB
CALL FindLast (FileSpec$,"\",WasX,WasY)
IF WasX < 1 THEN _
IF MID$(FileSpec$,2,1) = ":" THEN _
DrvPath$ = LEFT$(FileSpec$,1) : _
ZWasS = 3 _
ELSE ZWasS = 1 _
ELSE DrvPath$ = LEFT$(FileSpec$,WasX-1) : _
ZWasS = WasX + 1 : _
IF WasY = 1 THEN _
DrvPath$ = DrvPath$ + "\"
WasX = INSTR(ZWasS,FileSpec$ + ".",".") ' EC061301
IF WasX < WasL THEN _
Extension$ = MID$(FileSpec$,WasX + 1)
IF ZWasS <= WasL THEN _
IF WasX >= ZWasS THEN _
Prefix$ = MID$(FileSpec$,ZWasS,WasX - ZWasS)
IF NOT ForJoining THEN _
EXIT SUB
IF LEN(DrvPath$) = 1 THEN _
IF DrvPath$ <> "\" THEN _
DrvPath$ = DrvPath$ + _
":"
IF INSTR(DrvPath$,"\") > 0 AND RIGHT$(DrvPath$,1) <> "\" THEN _
DrvPath$ = DrvPath$ + _
"\"
IF LEN(Extension$) > 0 THEN _
Extension$ = "." + _
Extension$
END SUB
------------------------[ KG081704 ]-------------------------
Problem: When classifying an upload and select D)efault, sometimes
gets blanks rather than the category specified in CONFIG.
Solution: Change RBBSSUB3.BAS as follows:
20720 ZOutTxt$= "Upload best fits what category (D=default,H=help)"
ZSubParm = 1
CALL TGet
CALL AllCaps (ZUserIn$(1))
IF ZSubParm = -1 OR ZUserIn$(1) = "D" THEN _
UCat$ = ZDefaultCatCode$ : _ ' KG071704
GOTO 20722
IF ZWasQ = 0 THEN _
GOTO 20719
IF ZUserIn$(1) = "H" OR _
ZUserIn$(1) = "*" OR _
ZUserIn$(1) = "?" THEN _
GOTO 20719
CALL SearchArray (ZUserIn$(1),ZCategoryName$(),ZNumCategories,Found)
IF Found > 0 THEN _
UCat$ = ZCategoryCode$(Found) : _
IF LEN(UCat$) > 0 AND LEN(UCat$) < 4 AND INSTR(UCat$,",") = 0 THEN _
GOTO 20722
UCat$ = ""
IF NOT ZLimitSearchToFMS THEN _
StrewTo$ = ZDirPath$ + _
ZUserIn$(1) + _
"." + _
ZDirExtension$ : _
CALL FindIt (StrewTo$) : _
IF ZOK THEN _
GOTO 20722 _
ELSE CALL WordInFile (ZUpcatHelp$,ZUserIn$(1),ZOK) : _
IF ZOK THEN _
GOTO 20722
StrewTo$ = ""
CALL QuickTPut1 ("No such category " + ZUserIn$(1))
GOTO 20719
------------------------[ KG081703 ]-------------------------
Problem: When using Programmable User Interface, possible to
get in an infinite loop with a self-reinvoking macro.
Solution: Change RBBSSUB4.BAS as follows:
59492 CALL QuickTPut1 ("No such option <" + ZWasZ$ + ">") ' DA071701
Call FlushKeys ' KG081703
GOTO 59460
END SUB
------------------------[ KG081702 ]-------------------------
Problem: RBBS puts the min left on a line by itself and then
the conference name on another line by itself. Waste of line
space and looks bad.
Solution: put the min left after the conference name. In
main, will just show min left. Also, add comments to clarify code.
Change RBBS-PC.BAS as follows:
1210 GOSUB 41000
IF ZAnsIndex < ZLastIndex THEN _
GOTO 1232
CALL Talk (10,ZOutTxt$)
CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) ' KG081702
IF ZExpertUser THEN _
GOTO 1230
1230 CALL Line25 ' KG081404
IF ZConfMode THEN _
ZOutTxt$ = ZConfName$ + ":" : _ ' KG081702
GOSUB 12978 : _ ' KG081702
CALL Talk (65,ZConfName$)
CALL DispTimeRemain (MinsRemaining) ' KG081702
IF ZMenuIndex = 6 THEN _
ZSubParm = 1 : _
CALL Library
CALL Talk (ZMenuIndex, ZOutTxt$)
12978 ZSubParm = 4 ' no cr/lf ' KG081702
GOTO 12981
12979 ZSubParm = 5 ' cr/lf ' KG081702
GOTO 12981
------------------------[ KG081701 ]-------------------------
Problem: In a text message "transfer" is spelled "tranfer".
Solution: Change RBBSSUB5.BAS as follows:
20745 ZOutTxt$ = ZXOff$ + _
"SYSOP aborted upload. Stop transfer. <Ctrl-K> continues" ' KG081701
GOTO 20675
------------------------[ KG081603 ]-------------------------
Problem: Nested submenus in RBBS keep adding the response to
the menu name. This allows menus with the same range of
responses. However, in bulletins, the submenu choice may invoke
an earlier menu rather than the outer menu. This happens because
RBBS checks for a choice with original prefix + answer before the
outer menu. Thus, if prefix is B and in menu A (BA.MNU) and
enter choice A, will get same menu back (prefix + answer) rather
than submenu off of BA (BAA.MNU).
Note: this problem causes the example of submenus in the
documentation not to work right.
Solution: Check for nested submenu 1st, then for prefix, rather
than other way around.
Change RBBSSUB4.BAS as follows:
59530 ZWasZ$ = ZUserIn$(ZAnsIndex)
CALL AllCaps (ZWasZ$)
IF INSTR(ReturnOn$,ZWasZ$) THEN _ 'check whether calling pgm wants
EXIT SUB
IF INSTR("LH?",ZWasZ$) THEN _ 'check whether caller wants help
GOTO 59515
IF INSTR(ZWasZ$,".") > 0 THEN _
GOTO 59532
FPre$ = MenuFront$ ' check for sub-option ' KG081603
GOSUB 59538
IF NOT ZOK THEN _ ' KG081603
FPre$ = FrontOpt$ : _ ' check standard option ' KG081603
GOSUB 59538 : _
IF NOT ZOK THEN _ ' check option where menu is ' KG081603
FPre$ = MenuDrv$ : _ ' KG081603
GOSUB 59538
IF NewMenu THEN _
NewMenu = ZFalse : _
GOTO 59515
IF ZOK THEN _
EXIT SUB
------------------------[ KG081602 ]-------------------------
Problem: When can't create callers log, say because subdirectory
in path does not exist, not getting any related diagnostic message.
Solution: Change RBBSSUB1.BAS as follows:
65000 IF ZDebug THEN _
ZOutTxt$ = "RBBSSUB1 DEBUG Error Trap Entry ERL=" + _
STR$(ERL) + _
" ERR=" + _
STR$(ERR) : _
IF ZPrinter THEN _
CALL Printit(ZOutTxt$) _
ELSE CALL LPrnt(ZOutTxt$,1)
ZErrCode = ERR
'
' SetCall
'
IF ERL = 108 THEN _
CALL PScrn ("Unable to create callers log " + ZCallersFile$) : _ ' KG081602
SYSTEM ' KG081602
IF ERL = 110 THEN _
RESUME NEXT
.
.
.
------------------------[ KG081601 ]-------------------------
Problem: K)ill option at end of message being read may fail to
show even though caller can kill the message.
Solution: Change RBBS-PC.BAS as follows:
4600 IF ScanMsgs THEN _
GOSUB 8020 : _
GOTO 4630
IF NOT JustSearching THEN _
GOSUB 8000 : _
IF QuotedReply THEN _
QuotedReply = ZFalse : _
GOTO 4603 ' KG081303
IF ZRet THEN _
GOTO 4630
CanChangeSec = (ZUserSecLevel => ZSecChangeMsg)
ShowKill = - ((ZUserSecLevel >= ZOptSec(9)) AND (UserInHeader OR CanKill)) ' KG081601
IF ZExpertUser THEN _
WasA1$ = ",H,R,T,=,+,-" + _ ' KG081303
MID$(",F",1,- (UserInHeader OR CanChangeSec) * 2) + _
MID$(",K",1,ShowKill * 2) + _ ' KG081601
MID$(",U",1,- (ZUserSecLevel >= ZOptSec(54)) * 2) + _
MID$(",S",1, - CanChangeSec * 2) : _ ' KG081303
GOTO 4602 ' KG081303
4601 WasA1$ = ",H)lp,R)eply,T)hread,=)again,+,-" + _ ' KG081303
MID$(",F)wd",1, - (UserInHeader OR CanChangeSec) * 5) + _
MID$(",K)ill",1, ShowKill * 6) + _ ' KG081601
MID$(",U)sr",1,- (ZUserSecLevel >= ZOptSec(54)) * 6) + _ ' KG081303
MID$(",S)ec",1, - CanChangeSec * 5)
------------------------[ KG081501 ]-------------------------
Problem: When stack personal download command to get new files
to you ("p *"), get "unable to access *" after the real files.
Solution: Change RBBSSUB4.BAS as follows:
59304 SelectedProtocol$ = ""
IF ZLastIndex > 1 THEN _
IF LEN(ZUserIn$(ZLastIndex)) = 1 THEN _
SelectedProtocol$ = ZUserIn$(ZLastIndex) : _
CALL AllCaps (SelectedProtocol$) : _ ' KG081501
IF INSTR(ZDefaultXfer$,SelectedProtocol$) = 0 THEN _ ' KG081501
SelectedProtocol$ = "" _ ' KG081501
ELSE ZLastIndex = ZLastIndex - 1 ' KG081501
IF LEN(ZUserIn$(ZAnsIndex)) > 1 THEN _
GOTO 59330
CALL AllCaps (ZUserIn$(ZAnsIndex))
ON INSTR("L*",ZUserIn$(ZAnsIndex)) GOTO 59305,59327
GOTO 59303
------------------------[ KG081405 ]-------------------------
Display in conference view, when have personal mail waiting,
made easier to see by reporting only when have any. Based on
work done by John Morris.
Change RBBSSUB4.BAS as follows:
59852 IF NOT ZOK THEN _
GOTO 59854 _ ' KG072101
ELSE IF EOF(2) THEN _ ' KG072101
IF LogicalEOF$ = "" OR SkipParms = 0 THEN _ ' KG073104
GOTO 59854 _ ' KG072101
ELSE CALL FindIt (ZConfMailList$) : _ ' KG072101
SkipParms = 0 : _ ' KG072901
GOTO 59852 ' KG072101
CALL ReadAny
ZActiveUserFile$ = ZOutTxt$
CALL ReadAny
IF ZErrCode > 0 THEN _
GOTO 59854
SkipParms = SkipParms + 2 ' KG080701
ZActiveMessageFile$ = ZOutTxt$ ' KG072901
CALL FindFile (ZActiveUserFile$,ZOK)
IF NOT ZOK THEN _
GOTO 59854
CALL OpenUser (HighestUserRecord)
FIELD 5, 128 AS ZUserRecord$
CALL FindFile (ZActiveMessageFile$,ZOK)
IF NOT ZOK THEN _
GOTO 59854
CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
0,0,HighestUserRecord,_
Found,HoldUserFileIndex,ZWasSL)
IF NOT Found THEN _
GOTO 59853 ' KG080701
CALL OpenMsg
FIELD 1, 128 AS ZMsgRec$
GET 1,1
AnyMail = ZTrue
WasX = CVI(MID$(ZUserRecord$,57,2))
WasX = (WasX AND 512) > 0
CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
IF InCur THEN _
WasX = ZMailWaiting : _ ' KG030101
ZWasA = ZLastMsgRead _
ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
ZWasB = VAL(LEFT$(ZMsgRec$,8))
WasZ = (ZWasB - ZWasA)
IF WasZ < 0 THEN _
ZWasA = 0 : _
WasZ = ZWasB _
ELSE IF WasZ = 0 THEN _
WasX = ZFalse
ZOutTxt$ = MID$(STR$((ZWasB > ZWasA) * WasZ),2)
ZWasSL = LEN(ZOutTxt$)
ZOutTxt$ = SPACE$(-(ZWasSL<4) * (4-ZWasSL)) + ZOutTxt$
ZWasSL = LEN(CurPre$)
IF CurPre$ = "USERS" AND CurExt$ = "" THEN _
Conf$ = "MAIN" _
ELSE Conf$ = LEFT$(CurPre$,ZWasSL-1)
ZWasY$ = Conf$ + SPACE$(-(ZWasSL<8) * (8-ZWasSL))
IF WasX THEN _
WasX$ = ZEmphasizeOn$ + "*Some* to you" + ZEmphasizeOff$ _ ' KG081405
ELSE WasX$ = "" ' KG081405
ZOutTxt$ = ZWasY$ + ": " + ZOutTxt$ + " new message(s) " + _ ' KG081405
WasX$ ' KG081405
ZSubParm = 5
CALL TPut
ZJumpSupported = ZFalse ' DA080901
IF SkipJoinUnjoin THEN _
CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) : _
GOTO 59853 ' KG080701
ZTurboKey = -ZTurboKeyUser
CALL AskMore (",J)oin,U)njoin",ZTrue,ZFalse,WasX,ZFalse)
IF ZNo THEN _
GOTO 59854
WasX$ = LEFT$(ZUserIn$(1),1)
CALL AllCaps (WasX$)
IF WasX$ = "J" THEN _
ZHomeConf$ = Conf$ : _
GOTO 59854
IF WasX$ = "U" THEN _
IF InCur OR (OrigPre$ = CurPre$ AND OrigExt$ = CurExt$) THEN _
CALL QuickTPut1 ("Can't omit yourself from the board or conference you're in") _
ELSE LSET ZUserRecord$ = CHR$(0) + "deleted user" : _
ZUserFileIndex = HoldUserFileIndex : _
ZSubParm = 6 : _
CALL FileLock : _
PUT 5, HoldUserFileIndex : _
ZSubParm = 8 : _
CALL FileLock : _
CALL QuickTPut1 ("Omitted you from " + Conf$) ' KG073104
------------------------[ KG081404 ]-------------------------
Problem: Possible to get part of screen to scroll off without
pausing when doing msg header or topic scan.
Solution: Change RBBS-PC.BAS as follows:
1210 GOSUB 41000
IF ZAnsIndex < ZLastIndex THEN _
GOTO 1232
CALL Talk (10,ZOutTxt$)
CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) ' KG081404
CALL DispTimeRemain (MinsRemaining)
IF ZExpertUser THEN _
GOTO 1230
1230 CALL Line25 ' KG081404
IF ZConfMode THEN _
ZOutTxt$ = ZConfName$ : _
GOSUB 12979 : _
CALL Talk (65,ZConfName$)
IF ZMenuIndex = 6 THEN _
ZSubParm = 1 : _
CALL Library
CALL Talk (ZMenuIndex, ZOutTxt$)
4650 CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) ' KG081404
CALL QuickTPut1 ("--End Msgs--") ' KG081404
RETURN
------------------------[ KG081403 ]-------------------------
Problem: code had become jumbled so that logic difficult to
understand from the appearance.
Change CONFIG.BAS as follows:
14980 CALL ASKRO ("Specify name of the file for parameter " + X$ + ".",24,HJ$)
CALL ALLCAPS (HJ$)
IF LEN(HJ$) < 1 OR LEN(HJ$) > 12 THEN _
GOTO 14980
L1 = INSTR(HJ$,".")
IF L1 = 0 THEN _
IF LEN(HJ$) < 9 THEN _ ' KG081403
GOTO 15045 _ ' KG081403
ELSE GOTO 14980 ' KG081403
IF L1 > 9 THEN _
GOTO 14980
IF L1 < 2 THEN _
GOTO 14980
IF LEN(HJ$) - L1 > 3 THEN _
GOTO 14980
------------------------[ KG081402 ]-------------------------
Problem: the prefix for some help commands is asked for in
CONFIG but never actually used to set the names of help files.
Change CONFIG.BAS as follows:
14815 GOSUB 15200
QUES.PATH$ = HJ$
RETURN
'
' * PREFIX FOR FOR FOUR MAJOR 'HELP' FILES ' KG081402
'
14820 GOSUB 14970
IF LEN(HJ$) > 7 THEN _
RETURN
HELP.FILE.PREFIX$ = HJ$
HELP$(3) = HELP.FILE.PREFIX$ + "3" ' KG081402
HELP$(4) = HELP.FILE.PREFIX$ + "4" ' KG081402
HELP$(7) = HELP.FILE.PREFIX$ + "7" ' KG081402
HELP$(9) = HELP.FILE.PREFIX$ + "9" ' KG081402
RETURN
------------------------[ KG081401 ]-------------------------
Problem: Initialization of modem commands in CONFIG had some
redundancy and inconsistency.
Change CNFG-SUB.BAS as follows:
62120 SUB MODEMINITCMD STATIC ' KG080901
RTS$ = "NO" ' DA080503
MODEM.INIT.WAIT.TIME = 3 ' DA080503
COMMANDS.BETWEEN.RINGS = FALSE ' DA080503
FIRMWARE.INITIALIZE.COMMAND$ = "AT&C1&D3B1E0V1M0S0=0" ' KG081402
FIRMWARE.CLEAR.COMMAND$ = "AT&F" ' DA080503
FIRMWARE.WRITE.COMMAND$ = "AT&W" ' DA080503
KEEP.INIT.BAUD = FALSE ' DA080503
MODEM.ANSWER.COMMAND$ = "ATQ0X1V1A"
MODEM.COMMAND.DELAY.TIME = 1
MODEM.COUNT.RINGS.COMMAND$ = "ATS1?"
MODEM.GO.OFFHOOK.COMMAND$ = "ATH1M0" ' DA080503
'MODEM.GO.OFFHOOK.COMMAND$ = "ATQ1E1H1M0"
MODEM.INIT.BAUD$ = "300"
MODEM.INIT.COMMAND$ = "ATE0M0Q0V1X1S0=254S2=255S10=20" ' DA080503
'MODEM.INIT.COMMAND$ = "ATM0Q1S2=255S10=30E0Q0X1S0=254 "
MODEM.RESET.COMMAND$ = "ATZ" ' KG081402
'USER.INITIALIZE.COMMAND$ = "AT&C1&D3B1E0V1M0S0=0&T5"
'USER.FIRMWARE.WRITE.CMND$ = "&W"
USER.ANSWER.COMMAND$ = MODEM.ANSWER.COMMAND$ ' DA080503
USER.COUNT.RINGS.COMMAND$ = MODEM.COUNT.RINGS.COMMAND$ ' DA080503
USER.GO.OFFHOOK.COMMAND$ = MODEM.GO.OFFHOOK.COMMAND$ ' DA080503
USER.INIT.COMMAND$ = MODEM.INIT.COMMAND$ ' DA080503
USER.RESET.COMMAND$ = MODEM.RESET.COMMAND$ ' DA080503
USER.INITIALIZE.COMMAND$ = FIRMWARE.INITIALIZE.COMMAND$ ' DA080503
USER.FIRMWARE.CLEAR.CMND$ = FIRMWARE.CLEAR.COMMAND$ ' DA080503
USER.FIRMWARE.WRITE.CMND$ = FIRMWARE.WRITE.COMMAND$ ' DA080503
END SUB ' KG080901
------------------------[ XX081401 ]-------------------------
Problem: When specify a macro to be executed before a protocol,
in PROTO.DEF, it will not be executed if protocol is external.
Solution: Change RBBSSUB5.BAS as follows:
20262 IF ZBatchTransfer THEN _
IF ZAnsIndex < LastDnld THEN _
RETURN _
ELSE ZBlocksInFile# = BatchBlocks# : _
ZBytesInFile# = BatchBytes# : _
ZNumDnldBytes! = BatchBytes# : _
IF ZBytesInFile# < 1 THEN _
RETURN _
ELSE GOSUB 20780 : _
IF ZFileSysParm > 1 OR NOT ZOK THEN _
RETURN
IF ZAutoDownInProgress THEN _
CALL SendName : _
IF ZAbort THEN _
DnldCompleted = ZFalse : _
GOSUB 21760 : _
RETURN
GOSUB 20337 ' XX081401
CALL Transfer
------------------------[ KG081303 ]-------------------------
Problem: At the More prompt at the end of a message, RBBS does
not offer any help. Used to display HELP07.
Solution: The code was re-structured to make it clearer, faster, and
easy to revise, at the same time the help was added back. Change
RBBS-PC.BAS as follows:
4600 IF ScanMsgs THEN _
GOSUB 8020 : _
GOTO 4630
IF NOT JustSearching THEN _
GOSUB 8000 : _
IF QuotedReply THEN _
QuotedReply = ZFalse : _
GOTO 4603 ' KG081303
IF ZRet THEN _
GOTO 4630
CanChangeSec = (ZUserSecLevel => ZSecChangeMsg)
WasI = - ((ZUserSecLevel >= ZOptSec(9)) AND (UserInHeader OR CanKill)) ' KG051702
IF ZExpertUser THEN _
WasA1$ = ",H,R,T,=,+,-" + _ ' KG081303
MID$(",F",1,- (UserInHeader OR CanChangeSec) * 2) + _
MID$(",K",1,WasI * 2) + _ ' KG051702
MID$(",U",1,- (ZUserSecLevel >= ZOptSec(54)) * 2) + _
MID$(",S",1, - CanChangeSec * 2) : _ ' KG081303
GOTO 4602 ' KG081303
4601 WasA1$ = ",H)lp,R)eply,T)hread,=)again,+,-" + _ ' KG081303
MID$(",F)wd",1, - (UserInHeader OR CanChangeSec) * 5) + _
MID$(",K)ill",1, WasI * 6) + _ ' KG051702
MID$(",U)sr",1,- (ZUserSecLevel >= ZOptSec(54)) * 6) + _ ' KG081303
MID$(",S)ec",1, - CanChangeSec * 5)
4602 ZTurboKey = -ZTurboKeyUser ' KG081303
IF JustSearching OR NOT JustReplied THEN _
GOTO 4603 ' KG081303
JustReplied = ZFalse
CALL AskMore (WasA1$,ZTrue,ZFalse,ZAnsIndex,ZFalse)
CALL SkipLine (1)
IF ZNo THEN _
RETURN
CALL AllCaps (ZUserIn$(1)) ' KG081303
ZReply = (ZReply OR ZUserIn$(1) = "R") ' KG081303
IF ZUserIn$(1) <> "=" THEN _ ' KG081303
GOTO 4605 ' KG081303
CALL SkipLine (1)
4603 IF NOT ZPswdFailed THEN _ ' KG081303
GOTO 4604 ' KG081303
IF WasPG AND (NOT ZNonStop) THEN _
ZAttemptsAllowed = 2 : _
ZSubParm = 2 : _
CALL PassWrd
IF ZPswdFailed THEN _ ' KG081303
GOTO 4629
4604 GOSUB 9000 ' KG081303
JustReplied = ZFalse
DontPrint = ZFalse
IF JustSearching THEN _
GOTO 4629
IF ZAnsIndex > NumMsgsSelected THEN _
GOTO 4650
CALL SkipLine (1)
GOSUB 41000 ' KG081303
ZKillMessage = ZFalse
ZReply = ZFalse
IF ZNonStop THEN _
GOTO 4629
ZTurboKey = -ZTurboKeyUser ' KG081303
CALL AskMore (WasA1$,ZTrue,ZFalse,WasXX,ZFalse)
IF ZNo THEN _
ZAnsIndex = ZLastIndex + 1 : _
RETURN
CALL AllCaps(ZUserIn$(1))
ZReply = (ZReply OR ZUserIn$(1) ="R")
4605 ON INSTR(" FUST+-KRH?=",LEFT$(ZUserIn$(1),1)) GOTO _ ' KG081303
4620,4606,4607,4608,4609,4610,4610,4611,4621,4612,4601,4613 ' KG081303
GOTO 4620 ' KG081303
4606 IF NOT (UserInHeader OR CanChangeSec) THEN _ ' Forward ' KG081303
GOTO 4620 ' KG081303
MsgFwd = ZTrue
GOTO 4623
4607 IF ZUserSecLevel < ZOptSec(54) THEN _ ' User edit ' KG081303
GOTO 4620 ' KG081303
EditFromRead = 1
ZReply=ZTrue
CALL PutMsgAttr
TempHashValue$ = MsgFrom$
CALL Trim (TempHashValue$)
IF TempHashValue$ = "SYSOP" THEN _
TempHashValue$ = ZSysopPswd1$ + " " + ZSysopPswd2$
GOTO 11000
4608 IF CanChangeSec THEN _ ' Security to read ' KG081303
CALL PutMsgAttr : _
GOSUB 4665 : _
ZReply = ZFalse : _
QuotedReply = ZTrue : _
CALL GetMsgAttr : _
DontPrint = ZTrue : _
ZUserIn$ = "=" : _
JustReplied = ZTrue : _
GOTO 4560
GOTO 4620 ' KG081303
4609 CALL SetThread (CurMsg, OrigSubject$) ' Thread ' KG081303
IF ZWasQ > 0 THEN _
SearchHeader$ = ZUserIn$(2) : _
SubInHeader$ = SearchHeader$ : _
CALL Trim (SubInHeader$) : _
GOTO 4352
GOTO 4620 ' KG081303
4610 ZWasA = INSTR(" +-",ZUserIn$(1)) ' +/- read direction ' KG081303
CurMsg = CurMsg + 5 - 2 * ZWasA ' KG081303
Forward = (ZWasA = 2)
Reverse = (NOT Forward)
SearchString$ = ""
IF Reverse THEN _
GOTO 4490 _
ELSE GOTO 4450
4611 IF (UserInHeader OR CanKill) THEN _ ' Kill ' KG081303
IF ZUserSecLevel >= ZOptSec(9) THEN _
CALL PutMsgAttr : _
MsgToKill = CurMsg : _
Temp = ZWasQ : _
GOSUB 3950 : _
CALL GetMsgAttr : _
GOTO 4629 _
ELSE ZViolation$ = "MORE KILL" : _
GOSUB 1380 : _
GOTO 4629
GOTO 4620 ' KG081303
4612 ZFileName$ = ZHelp$(7) ' H - help ' KG081303
GOSUB 1790 ' KG081303
GOTO 4601 ' KG081303
4613 CALL SkipLine (1) ' = read again ' KG081303
GOTO 4560 ' KG081303
Omit lines 4614,4616,4617,4618
------------------------[ KG081302 ]-------------------------
Problem: RBBS should support "?" for help, but does not at the
message read prompt.
Change RBBS-PC.BAS as follows:
4402 IF LEN(ZUserIn$(ZAnsIndex)) = 1 THEN _ ' KG022701
IF INSTR("Qq",ZUserIn$) THEN _
RETURN _
ELSE IF INSTR("Hh?",LEFT$(ZUserIn$(ZAnsIndex),1)) THEN _ ' KG081302
ZFileName$ = ZHelpPath$ + "MR" + ZHelpExtension$ : _
GOSUB 1790 : _
GOTO 4390
MsgIndex = 0 ' KG022701
NumMsgsSelected = ZWasQ
GOTO 4370
------------------------[ KG081301 ]-------------------------
Problem: The utilities toggle command will not stack a "C" for
case change.
Solution: Change RBBS-PC.BAS as follows:
1510 ZStackC = ZTrue ' KG081301
GOSUB 12930
IF ZWasQ=0 THEN _
RETURN
ZWasZ$ = ZUserIn$(ZAnsIndex)
CALL AllCaps (ZWasZ$)
ZFF = INSTR("ABCFHLNTX!",ZWasZ$)
IF ZFF < 1 THEN _
GOTO 1500
CALL Toggle (ZFF)
GOSUB 12997
GOTO 1500
------------------------[ KG081201 ]-------------------------
Problem: When search files by wildcard filename ending with
"*", such as "PC*", RBBS matches only when there is not extension
versus matching all extensions like DOS.
Solution: Change RBBSSUB5.BAS as follows:
21820 WasRS$ = ZUserIn$(ZAnsIndex)
WildSearch = (INSTR(WasRS$,"*") > 0 OR INSTR(WasRS$,"?") > 0)
CALL AllCaps (WasRS$)
IF RIGHT$(WasRS$,1) = "*" THEN _ ' KG081201
IF RIGHT$(WasRS$,2) <> ".*" THEN _ ' KG081201
WasRS$ = WasRS$ + ".*" ' KG081201
SearchString$ = WasRS$
SearchDate$ = ""
ZJumpSearching = ZFalse
WasA1$ = WasRS$
GOTO 21867
'
' ***** P - personal download ****
'
' (formerly lines 52950 to 52952 in RBBS-PC.BAS
------------------------[ DA081006 ]-------------------------
Problem: CONFIG beeps when it does a normal, successful saved.
Instead use sound to draw attention to problems.
Change CONFIG.BAS as follows:
59080 CLOSE #1
'
' * NOTIFY THE SYSOP THAT THE CONFIGURATION DESCRIPTION FILE HAS BEEN WRITTEN
'
CLS
LOCATE 12,1,1
PRINT "Saved RBBS-PC configuration description file " ; CONFIG.FILENAME$ ' KG080904
GOTO 60340 ' DA081006
------------------------[ DA081005 ]-------------------------
Problem: Should only have carriage return inside modem commands,
not carriage return plus line feed, when substitute for "{".
Change CONFIG.BAS as follows:
23736 PRINT "Send:" ' DA080502
WHILE INSTR(A$, "{") ' DA080502
MID$(A$, INSTR(A$,"{"), 1) = CHR$(13) ' DA081005
WEND ' DA080502
WHILE INSTR(A$, "~") ' DA080502
WAIT.FOUND = INSTR(A$,"~") ' DA080502
TEMP.A$ = MID$(A$, WAIT.FOUND + 1) ' DA080502
A$ = LEFT$(A$, WAIT.FOUND - 1) ' DA080502
GOSUB 23739 ' DA080502
DELAY! = FNTI! + 1 ' DA080502
GOSUB 60440 ' DA080502
A$ = TEMP.A$ ' DA080502
WEND ' DA080502
A$ = A$ + CHR$(13) ' DA081005
GOSUB 23739 ' DA080502
DELAY! = FNTI! + 3 ' DA080502
GOSUB 60440 ' DA080502
PRINT "Receive:" ' DA080502
IF NOT FOSSIL THEN _ ' DA080502
GOTO 23738 ' DA080503
FOS.LEN% = 80 ' DA080503
CALL FOSREAD(COMPORT%, FOS.LEN%, FOS.BUF$) ' DA080502
PRINT LEFT$(FOS.BUF$,FOS.LEN%) ' DA080503
RETURN ' DA080502
------------------------[ DA081004 ]-------------------------
Problem: Default secret name of SysOp changed to match quick start
in documentation, and one that does not have to changed with
each new version of RBBS.
Change CNFG-SUB.BAS as follows:
(line 63090)
.
.
.
SYSOP.FIRST.NAME$ = "TOM"
SYSOP.LAST.NAME$ = "MACK"
SYSOP.MENU.SECURITY.LEVEL = SYSOP.SECURITY.LEVEL
SYSOP.PASSWORD.1$ = "SECRET" ' DA081004
SYSOP.PASSWORD.2$ = "NAME" ' DA081004
TIME.TO.DROP.TO.DOS = 0
TRASHCAN.FILE$ = D$ + "TRASHCAN"
TURN.PRINTER.OFF = FALSE
TURBO.RBBS = TRUE
.
.
.
------------------------[ DA081003 ]-------------------------
Version of RBBS changed to be just number and not to have "CPC"
as prefix.
(changes not listed since do not affect any functions)
------------------------[ DA081002 ]-------------------------
Problem: documentation of modem commands in source code is not
right and not right place to do this.
Change CONFIG.BAS as follows:
23731 LOCATE 25,5
COMPORT% = VAL(RIGHT$(COM.PORT$,1)) -1
IF COMPORT% < 0 THEN _
PRINT "COM port cannot be set while using COM0" : _
DELAY! = FNTI! + 3 : _
GOSUB 60440 : _
RETURN
FOS.BUF$ = SPACE$(80) ' DA080502
CLS ' DA080502
PRINT "Setting modem firmware for RBBS-PC on " + COM.PORT$ ' DA080502
IF NOT FOSSIL THEN _ ' DA080502
GOTO 23732 ' DA080502
CALL FOSINIT(COMPORT%,RESULT%) ' DA080502
IF RESULT% = -1 THEN _ ' DA080502
PRINT "ERROR initializing FOSSIL. Firmware reset aborted." : _ ' DA080502
GOTO 23736 ' DA080502
CALL FOSSPEED(COMPORT%,2400, 2, 3, 1) ' DA080502
STATE% = 1 ' DA080502
CALL FOSDTR(COMPORT%,STATE%) ' DA080502
GOTO 23733 ' DA081002
------------------------[ DA081001 ]-------------------------
Shortens and clarifies code that displays screen full of modems
to select.
Change CNFG-SUB.BAS as follows:
62103 CLOSE 2 ' DA080503
IF NETWORK.TYPE = 6 THEN _ ' DA080503
OPEN "MODEMS.SET" FOR INPUT SHARED AS #2 _ ' DA080503
ELSE OPEN "I",2,"MODEMS.SET" ' DA080503
MODEM.MODEL = 0
MODEM.PAGE = 0 ' DA081001
62105 CLS ' DA080503
PRINT "NUMBER";
LOCATE 1,10
PRINT "Modem Model";
LOCATE 1,40
PRINT "Switch Settings";
LOCATE 2,1
PRINT STRING$(78,"-");
FOR DISPLAY.LINE = 3 TO 19
IF EOF(2) THEN _
MODEM.PAGE = 1 : _ ' DA081001
GOTO 62110
MODEM.MODEL = MODEM.MODEL + 1
INPUT #2, MODEM.MODEL$, SWITCHES$
FOR I = 1 TO 14 ' # MODEMS.SET parms - 2
INPUT #2,GARBAGE$
NEXT
LOCATE DISPLAY.LINE, 2
PRINT MODEM.MODEL;
LOCATE DISPLAY.LINE, 10
PRINT MODEM.MODEL$;
LOCATE DISPLAY.LINE, 40
PRINT SWITCHES$;
NEXT ' DA081001
LOCATE DISPLAY.LINE + 1, 2
PRINT " 0"
LOCATE DISPLAY.LINE + 1, 10
PRINT "Next Page"
62110 LOCATE 24,10 ' DA080503
PRINT "Use Parameter 231 to initialize modem's firmware";
CALL GETINIT("Select modem number, or [ENTER] to exit", _
22,MODEM.PAGE,MODEM.MODEL,MODEM.SELECTED, CR) ' DA081001
IF CR THEN _
EXIT SUB
IF MODEM.SELECTED = 0 THEN _ ' DA081001
GOTO 62105
CLOSE 2
IF NETWORK.TYPE = 6 THEN _
OPEN "MODEMS.SET" FOR INPUT SHARED AS #2 _
ELSE OPEN "I",2,"MODEMS.SET"
FOR I = 1 TO (MODEM.SELECTED - 1) * 16 ' # of parms * modem
INPUT #2,GARBAGE$
NEXT
INPUT #2, MODEM.MODEL$, _
SWITCHES$, _
USER.ANSWER.COMMAND$, _
USER.COUNT.RINGS.COMMAND$, _
USER.GO.OFFHOOK.COMMAND$, _
USER.INIT.COMMAND$, _
USER.RESET.COMMAND$, _
USER.INITIALIZE.COMMAND$, _
USER.FIRMWARE.CLEAR.CMND$, _
USER.FIRMWARE.WRITE.CMND$, _
RTS$, _
MODEM.INIT.WAIT.TIME, _
MODEM.COMMAND.DELAY.TIME, _
COMMANDS.BETWEEN.RINGS, _
MODEM.INIT.BAUD$, _
KEEP.INIT.BAUD
CLOSE 2
END SUB
------------------------[ DA080903 ]-------------------------
Move "*" marking new files from column 13 to end of the file name.
Change RBBSSUB4.BAS as follows:
59320 ZOutTxt$ = PartToPrint$
IF PersonalStatus$ = "*" AND LEFT$(ZOutTxt$,1) <> " " THEN _
MID$(ZOutTxt$, INSTR(ZOutTxt$," ")) = "*" ' DA080903
CALL ColorDir (ZOutTxt$,"Y")
IF ZLocalUser THEN _
GOTO 59322
CALL EofComm (Char)
IF Char <> -1 THEN _
GOTO 59323 ' comm port input
------------------------[ DA080902 ]-------------------------
Problem: Status line on local monitor sometimes got messed up and
scrolled.
Note that "Paged!" shortened to "PG!" and "Autopaged!" to "AP!".
Change RBBS-PC.BAS as follows:
4755 CALL QuickTPut1 ("Try a msg or comment")
ZPageStatus$ = "PG!" ' DA080902
CALL UpdtCalr ("Operator paged " + LEFT$(TIME$,5),2)
RETURN
Change RBBSSUB2.BAS as follows:
949 ZLine25$ = "Node " + _
ZNodeID$ + " " + _
ZPageStatus$ + " " + _
MID$("AVL ",1, -4 * ZSysopAvail) + _ ' DA080902
MID$("ANY ",1, -4 * ZSysopAnnoy) + _ ' DA080902
MID$("LPT ",1, -4 * ZPrinter) + _ ' DA080902
MID$("SYS ",1, -4 * ZSysopNext) + _ ' DA080902
MID$("XOFF ",1,-5 * ZXOffEd) + _ ' DA080902
MID$("CTS ",1,-4 * ZNotCTS) ' DA080902
'
'
' * LINE 25 UPDATE ROUTINE
'
'
950 IF NOT ZSnoop THEN _
EXIT SUB
ZCursorLine = CSRLIN
ZCursorRow = POS(0)
ZWasHH = LEN(ZActiveUserName$) + _
LEN(ZWasCI$) + _
LEN(ZLine25$) + _
LEN(STR$(ZUserSecLevel)) ' DA080902
LOCATE 25,1
IF ZNetworkType = 0 THEN _
IF ZAutoDownYes THEN _
ZLockStatus$ = " AD " + _ ' DA080902
ZTimeLoggedOn$ _
ELSE ZLockStatus$ = SPACE$(4) + _ ' DA080902
ZTimeLoggedOn$
IF ZWasHH > 63 THEN _ ' DA080902
ZWasHH = 0 _ ' DA080902
ELSE _ ' DA080902
ZWasHH = 64 - ZWasHH ' DA080902
ZLine25Hold$ = ZLine25$ + _
SPACE$(ZWasHH) + _ ' DA080902
STR$(ZUserSecLevel) + _
" " + _
ZActiveUserName$ + _
" " + _
ZWasCI$ ' DA080902
ZLine25Hold$ = LEFT$(ZLine25Hold$, 66) + " " + ZLockStatus$ ' DA080902
TempBasicWrites = ZUseBASICWrites
ZUseBASICWrites = ZTrue
CALL LPrnt(ZLine25Hold$,0)
ZUseBASICWrites = TempBasicWrites
LOCATE ZCursorLine,ZCursorRow
END SUB
Change RBBSSUB4.BAS as follows:
(line 60300)
SUB AutoPage STATIC
CALL FindIt (ZAutoPageDef$)
IF NOT ZOK THEN _
EXIT SUB
ZErrCode = 0
ZOK = ZFalse
WHILE NOT EOF(2) AND ZOK = ZFalse AND ZErrCode = 0
CALL ReadParms (ZWorkAra$(),4,1)
IF ZErrCode = 0 THEN _
ZOK = (ZWorkAra$(1) = ZActiveUserName$) : _
IF NOT ZOK THEN _
IF ZNewUser AND ZWorkAra$(1) = "NEWUSER" THEN _
ZOK = ZTrue _
ELSE IF LEFT$(ZWorkAra$(1),1) = "/" AND LEN(ZWorkAra$(1)) > 2 THEN _
ZWasB = INSTR (2,ZWorkAra$(1),"/") : _
IF ZWasB > 0 AND LEN(ZWorkAra$(1)) > ZWasB THEN _
IF ZUserSecLevel <= VAL(MID$(ZWorkAra$(1),ZWasB+1)) AND _
ZUserSecLevel >= VAL(MID$(ZWorkAra$(1),2)) THEN _
ZOK = ZTrue
WEND
CLOSE 2
IF ZErrCode > 0 OR NOT ZOK THEN _
ZErrCode = 0 : _
EXIT SUB
ZPageStatus$ = "AP!" ' DA080902
IF LEFT$(ZWorkAra$(2),1) = "N" THEN _
ZOutTxt$ = "Telling sysop you're on..." : _
CALL RingCaller
ZWasB = (ZWorkAra$(4) = "")
ZWorkAra$(5) = ""
FOR WasI = 1 TO VAL(ZWorkAra$(3))
IF ZWasB THEN _
CALL LPrnt (ZBellRinger$,0) : _
ELSE ZWorkAra$(5) = ZWorkAra$(5) + "O4 X" + VARPTR$(ZWorkAra$(4))
NEXT
IF NOT ZWasB THEN _
CALL RBBSPlay (ZWorkAra$(5))
END SUB
------------------------[ DA080901 ]-------------------------
Problem: When do a conference V)iew after a Jump, jump option
persists and J does not do a join.
Change RBBSSUB4.BAS as follows:
59852 IF NOT ZOK THEN _
GOTO 59854 _ ' KG072101
ELSE IF EOF(2) THEN _ ' KG072101
IF LogicalEOF$ = "" OR SkipParms = 0 THEN _ ' KG073104
GOTO 59854 _ ' KG072101
ELSE CALL FindIt (ZConfMailList$) : _ ' KG072101
SkipParms = 0 : _ ' KG072901
GOTO 59852 ' KG072101
CALL ReadAny
ZActiveUserFile$ = ZOutTxt$
CALL ReadAny
IF ZErrCode > 0 THEN _
GOTO 59854
SkipParms = SkipParms + 2 ' KG080701
ZActiveMessageFile$ = ZOutTxt$ ' KG072901
CALL FindFile (ZActiveUserFile$,ZOK)
IF NOT ZOK THEN _
GOTO 59854
CALL OpenUser (HighestUserRecord)
FIELD 5, 128 AS ZUserRecord$
CALL FindFile (ZActiveMessageFile$,ZOK)
IF NOT ZOK THEN _
GOTO 59854
CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
0,0,HighestUserRecord,_
Found,HoldUserFileIndex,ZWasSL)
IF NOT Found THEN _
GOTO 59853 ' KG080701
CALL OpenMsg
FIELD 1, 128 AS ZMsgRec$
GET 1,1
AnyMail = ZTrue
WasX = CVI(MID$(ZUserRecord$,57,2))
WasX = (WasX AND 512) > 0
CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
IF InCur THEN _
WasX = ZMailWaiting : _ ' KG030101
ZWasA = ZLastMsgRead _
ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
ZWasB = VAL(LEFT$(ZMsgRec$,8))
WasZ = (ZWasB - ZWasA)
IF WasZ < 0 THEN _
ZWasA = 0 : _
WasZ = ZWasB _
ELSE IF WasZ = 0 THEN _
WasX = ZFalse
ZOutTxt$ = MID$(STR$((ZWasB > ZWasA) * WasZ),2)
ZWasSL = LEN(ZOutTxt$)
ZOutTxt$ = SPACE$(-(ZWasSL<4) * (4-ZWasSL)) + ZOutTxt$
ZWasSL = LEN(CurPre$)
IF CurPre$ = "USERS" AND CurExt$ = "" THEN _
Conf$ = "MAIN" _
ELSE Conf$ = LEFT$(CurPre$,ZWasSL-1)
ZWasY$ = Conf$ + SPACE$(-(ZWasSL<8) * (8-ZWasSL))
IF WasX THEN _
WasX$ = ZEmphasizeOn$ : _
ZWasZ$ = ZEmphasizeOff$ _
ELSE WasX$ = "" : _
ZWasZ$ = ""
ZOutTxt$ = ZWasY$ + ": " + ZOutTxt$ + " new message(s): " + _
WasX$ + MID$(" None *Some*",-6 * WasX + 1,6) + " to you" + ZWasZ$
ZSubParm = 5
CALL TPut
ZJumpSupported = ZFalse ' DA080901
IF SkipJoinUnjoin THEN _
CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) : _
GOTO 59853 ' KG080701
ZTurboKey = -ZTurboKeyUser
CALL AskMore (",J)oin,U)njoin",ZTrue,ZFalse,WasX,ZFalse)
IF ZNo THEN _
GOTO 59854
WasX$ = LEFT$(ZUserIn$(1),1)
CALL AllCaps (WasX$)
IF WasX$ = "J" THEN _
ZHomeConf$ = Conf$ : _
GOTO 59854
IF WasX$ = "U" THEN _
IF InCur OR (OrigPre$ = CurPre$ AND OrigExt$ = CurExt$) THEN _
CALL QuickTPut1 ("Can't omit yourself from the board or conference you're in") _
ELSE LSET ZUserRecord$ = CHR$(0) + "deleted user" : _
ZUserFileIndex = HoldUserFileIndex : _
ZSubParm = 6 : _
CALL FileLock : _
PUT 5, HoldUserFileIndex : _
ZSubParm = 8 : _
CALL FileLock : _
CALL QuickTPut1 ("Omitted you from " + Conf$) ' KG073104
------------------------[ ML080802 ]-------------------------
Problem: When time shortened for external event, report of time
left may be different from time remaining displayed because of
an inconsistency in BASIC.
Change RBBSSUB3.BAS as follows:
41020 MinsRemaining = INT((ZSecsPerSession! - ZSecsUsedSession!) / 60) ' ML080802
END SUB
------------------------[ KG081002 ]-------------------------
Problem: When a caller joins a subboard for the 1st time, and it
has its own FMS master directory, the # of files reported as new
is wrong.
Solution: Change RBBS-PC.BAS as follows:
5348 GOSUB 12987
GOSUB 12990
IF SubBoard THEN _
ZHasDoored = ZFalse : _
ZActiveFMSDir$ = "" : _
ZTimeLoggedOn$ = TIME$ : _ ' KG070601
BoardCheckDate$ = LEFT$("00-00-00",-ZNewUser*8) + _ ' KG081001
LEFT$(ZLastDateTimeOn$,-(NOT ZNewUser)*8) : _ ' KG081001
RETURN 108
GOSUB 827
IF UpdateDate THEN _
BoardCheckDate$ = ZLastDateTimeOn$ : _
ZTimeLoggedOn$ = TIME$ : _ ' KG070601
LSET ZLastDateTimeOn$ = ZCurDate$ + _
" " + _
ZTimeLoggedOn$ : _
GOSUB 9440 : _
GOSUB 12991
IF PrevUSL <> ZUserSecLevel THEN _
CALL SetPrompt
GOSUB 1241
RETURN 852
------------------------[ KG081001 ]-------------------------
Code shortened and simplified again.
Change CONFIG.BAS as follows:
22350 CALL ASKRO ("Save changes? Y)es & exit, N)o - reedit, Q)uit don't save (Y,N,Q)",24,HJ$) ' KG080902
IF LEN(HJ$) < 1 OR LEN(HJ$) > 4 THEN _
GOTO 22350 ' KG081001
CALL ALLCAPS (HJ$)
AB = INSTR("NYQ",LEFT$(HJ$,1)) ' KG080903
ON AB GOTO 12190,59000,60360 ' KG081001
GOTO 22350 ' KG081001
Omit lines 22380,22470
------------------------[ KG080905 ]-------------------------
Problem: When personal files are displayed and the description
length goes out the maximum permitted, get double spacing because
the mark for new (*) is added at the front.
Solution: Move the mark for new to the end of the file name (column
13). Change RBBSSUB4.BAS as follows:
59320 ZOutTxt$ = PartToPrint$
IF PersonalStatus$ = "*" AND LEFT$(ZOutTxt$,1) <> " " THEN _
MID$(ZOutTxt$,13,1) = "*" ' KG080905
CALL ColorDir (ZOutTxt$,"Y")
IF ZLocalUser THEN _
GOTO 59322
CALL EofComm (Char)
IF Char <> -1 THEN _
GOTO 59323 ' comm port input
------------------------[ KG080904 ]-------------------------
Problem: Final message in config saves that def file saved
onto default drive. No necessarily right, as can specify any
drive/path on command line when invoke CONFIG.
Solution: Change CONFIG.BAS as follows:
59080 CLOSE #1
'
' * NOTIFY THE SYSOP THAT THE CONFIGURATION DESCRIPTION FILE HAS BEEN WRITTEN
'
CLS
LOCATE 12,1,1
PRINT "Saved RBBS-PC configuration description file " ; CONFIG.FILENAME$ ' KG080904
GOSUB 60380
GOTO 60340
------------------------[ KG080903 ]-------------------------
Problem: Code needlessly long and complicated.
Change CONFIG.BAS as follows:
22380 IF LEN(HJ$) < 1 OR LEN(HJ$) > 4 THEN _
GOTO 22470
CALL ALLCAPS (HJ$)
AB = INSTR("NYQ",LEFT$(HJ$,1)) ' KG080903
22470 IF AB = 0 THEN _ ' KG080903
AB = 4 ' KG080903
RETURN
------------------------[ KG080902 ]-------------------------
Problem: Meaning of exit choices in CONFIG not as clear as should be.
Change CONFIG.BAS as follows:
22350 CALL ASKRO ("Save changes? Y)es & exit, N)o - reedit, Q)uit don't save (Y,N,Q)",24,HJ$) ' KG080902
GOSUB 22380
ON AB GOTO 12190,59000,60360,22350
------------------------[ KG080901 ]-------------------------
Problem: Redundant code in two places.
Add the following variables to CNFG-VAR.BAS:
USER.ANSWER.COMMAND$
USER.COUNT.RINGS.COMMAND$
USER.GO.OFFHOOK.COMMAND$
USER.RESET.COMMAND$
Change CNFG-SUB.BAS as follows:
60390 MACRO.DRVPATH$ = D$
MACRO.EXTENSION$ = ""
MAIN.COMMANDS.DEFAULTS$ = "ABCDEFIJKOPRSTUVW@"
MAIN.COMMANDS$ = MAIN.COMMANDS.DEFAULTS$
MAIN.FUNCTION$(1,1) = "A)nswer questionnaire "
MAIN.FUNCTION$(2,1) = "B)ulletins "
MAIN.FUNCTION$(3,1) = "C)omments "
MAIN.FUNCTION$(4,1) = "D)oor subsystem "
MAIN.FUNCTION$(5,1) = "E)nter message "
MAIN.FUNCTION$(6,1) = "F)iles subsystem "
MAIN.FUNCTION$(7,1) = "I)nitial welcome "
MAIN.FUNCTION$(8,1) = "J)oin a conference "
MAIN.FUNCTION$(9,1) = "K)ill messages "
MAIN.FUNCTION$(10,1) = "O)perator page "
MAIN.FUNCTION$(11,1) = "P)ersonal mail "
MAIN.FUNCTION$(12,1) = "R)ead messages "
MAIN.FUNCTION$(13,1) = "S)can messages header "
MAIN.FUNCTION$(14,1) = "T)opic msg scan "
MAIN.FUNCTION$(15,1) = "U)tilities subsystem "
MAIN.FUNCTION$(16,1) = "V)iew conference mail "
MAIN.FUNCTION$(17,1) = "W)ho's on other nodes "
MAIN.FUNCTION$(18,1) = "@)Library subsystem "
MAIN.FUNCTION$(1,2) = "A"
MAIN.FUNCTION$(2,2) = "B"
MAIN.FUNCTION$(3,2) = "C"
MAIN.FUNCTION$(4,2) = "D"
MAIN.FUNCTION$(5,2) = "E"
MAIN.FUNCTION$(6,2) = "F"
MAIN.FUNCTION$(7,2) = "I"
MAIN.FUNCTION$(8,2) = "J"
MAIN.FUNCTION$(9,2) = "K"
MAIN.FUNCTION$(10,2) = "O"
MAIN.FUNCTION$(11,2) = "P"
MAIN.FUNCTION$(12,2) = "R"
MAIN.FUNCTION$(13,2) = "S"
MAIN.FUNCTION$(14,2) = "T"
MAIN.FUNCTION$(15,2) = "U"
MAIN.FUNCTION$(16,2) = "V"
MAIN.FUNCTION$(17,2) = "W"
MAIN.MESSAGE.BACKUP$ = D$ + "MESSAGES.BAK"
MAIN.MESSAGE.FILE$ = D$ + "MESSAGES"
MAIN.PUI$ = D$ + "MAIN.PUI"
MAIN.USER.FILE$ = D$ + "USERS"
MASTER.DIRECTORY.NAME$ = ""
MAX.ALLOWED.MSGS.FRM.DEF = 5
MAX.CARRIER.WAIT = 30
MAX.DESC.LEN = 40
MAX.EXTENDED.LINES = 2
MAX.MESSAGE.LINES = 19
MAX.PER.DAY = 0
MAX.REG.SEC = 0
MAX.USR.FILE.SIZE.FRM.DEF = 16
MAX.WORK.VAR = 30
MAXD = 15
MAXIMUM.DISPLAYABLE.PAGES = 17
MAXIMUM.PASSWORD.CHANGES = 3
MAXIMUM.VIOLATIONS = 5
MAXIMUM.NUMBER.OF.NODES = 1
MENU$(1) = D$ + "MENU1"
MENU$(2) = D$ + "MENU2"
MENU$(3) = D$ + "MENU3"
MENU$(4) = D$ + "MENU4"
MENU$(5) = D$ + "MENU5"
MENU$(6) = D$ + "MENU6"
MENUS.CAN.PAUSE = TRUE
MESSAGE.REMINDER = TRUE
MESSAGES.CAN.GROW = FALSE
MIN.NEWCALLER.BAUD = 0
MIN.OLDCALLER.BAUD = 0
MIN.SEC.TO.VIEW = DEFAULT.SECURITY.LEVEL
MINIMUM.LOGON.SECURITY = 0
MINIMUM.SECURITY.FOR.TEMP.PASSWORD = 5
MINUTES.PER.SESSION! = 72
MLCOM = FALSE
MM = 5
MO$ = DD$ ' KG080901
MUSIC = FALSE
NET.MAIL$ = "<none>"
NETWORK.TYPE = 0
NETWORK.TYPE$ = "IBM's DOS"
NEW.FILES.CHECK = FALSE
NEW.USER.QUESTIONNAIRE$ = D$ + "RBBS-REG.DEF"
NEWUSER.FILE$ = D$ + "NEWUSER"
NEWUSER.SETS.DEFAULTS = TRUE
OMIT.MAIN.DIRECTORY$ = "NO"
OMIT.UPLOAD.DIRECTORY$ = "NO"
OVERWRITE.SECURITY.LEVEL = SYSOP.SECURITY.LEVEL
PAGE.LENGTH = 23
PAGING.PRINTER.SUPPORT$ = ". "
PASSWORD.FILE$ = D$ + "PASSWRDS"
PCJR = FALSE
PERSONAL.BEGIN = 1
PERSONAL.DIR$ = D$+"PRIV.DEF"
PERSONAL.DRVPATH$ = D$
PERSONAL.LEN = 31
PERSONAL.CONCAT = FALSE
PRELOG$ = D$ + "PRELOG"
PRIVATE.READ.SEC = DEFAULT.SECURITY.LEVEL
PROTO.DEF$ = D$ + "PROTO.DEF"
PROMPT.BELL = 0
PROMPT.HASH$ = "Name"
PROMPT.INDIV$ = ""
PS = 5
PUBLIC.READ.SEC = DEFAULT.SECURITY.LEVEL
QUES.PATH$ = D$
RBBS.BAT$ = D$ + "RBBS" + NODE.ID$ + ".BAT"
RBBS.NAME$ = "RBBS-PC"
RCTTY.BAT$ = D$ + "RCTTY" + NODE.ID$ + ".BAT"
RECYCLE.TO.DOS = 0
RECYCLE.TO.DOS$ = "INTERNAL"
RECYCLE.WAIT = 0
REDIRECT.IO.METHOD = TRUE
REGISTRATION.PROGRAM$ = "<none>"
REMEMBER.NEW.USERS = TRUE
REMIND.FILE.TRANSFERS = FALSE
REMIND.PROFILE = FALSE
REQUIRE.NON.ASCII = TRUE
REQUIRED.QUESTIONNAIRE$ = "<none>"
REQUIRED.RINGS = 1
RESTRICT.BAUD = FALSE
RESTRICT.BY.DATE = FALSE
RESTRICT.VALID.CMDS = FALSE
RTS$ = "NO"
SCREEN.OUT.MSG$ = "SEEN-BY: "
SEC.CHANGE.MSG = SYSOP.SECURITY.LEVEL
SEC.LVL.EXEMPT.FRM.PURGING = SYSOP.SECURITY.LEVEL
SECVIO.HLP$ = D$ + "SECVIO." + HELP.EXTENSION$
SECURITY.EXEMPT.FROM.EPILOG= DEFAULT.SECURITY.LEVEL + 1
SF = SYSOP.SECURITY.LEVEL
SHOOT.YOURSELF = FALSE
SHOW.SECTION = TRUE
SIZE.OF.STACK = 1024
SL.CATEGORIZE.UPLOADS = SYSOP.SECURITY.LEVEL
SMART.TEXT = 123
START.HASH = 1
START.INDIV = 0
START.OFFICE.HOURS = 800
SURVIVE.NOUSER.ROOM = FALSE
SWITCH.BACK = FALSE
SYSOP.COMMANDS.DEFAULTS$ = "1234567"
SYSOP.COMMANDS$ = SYSOP.COMMANDS.DEFAULTS$
SYSOP.FUNCTION$(1,1) = " 1 List comments "
SYSOP.FUNCTION$(2,1) = " 2 List CALLERS log "
SYSOP.FUNCTION$(3,1) = " 3 Recover a message "
SYSOP.FUNCTION$(4,1) = " 4 Erase comments "
SYSOP.FUNCTION$(5,1) = " 5 User maintenance "
SYSOP.FUNCTION$(6,1) = " 6 Toggle Page bell "
SYSOP.FUNCTION$(7,1) = " 7 Exit to DOS "
SYSOP.FUNCTION$(1,2) = " 1"
SYSOP.FUNCTION$(2,2) = " 2"
SYSOP.FUNCTION$(3,2) = " 3"
SYSOP.FUNCTION$(4,2) = " 4"
SYSOP.FUNCTION$(5,2) = " 5"
SYSOP.FUNCTION$(6,2) = " 6"
SYSOP.FUNCTION$(7,2) = " 7"
SYSOP.FIRST.NAME$ = "TOM"
SYSOP.LAST.NAME$ = "MACK"
SYSOP.MENU.SECURITY.LEVEL = SYSOP.SECURITY.LEVEL
SYSOP.PASSWORD.1$ = "RBBS-PC"
SYSOP.PASSWORD.2$ = "CPC173"
TIME.TO.DROP.TO.DOS = 0
TRASHCAN.FILE$ = D$ + "TRASHCAN"
TURN.PRINTER.OFF = FALSE
TURBO.RBBS = TRUE
UE = 5
FMS.DIRECTORY$ = ""
UPCAT.HELP$ = "UPCAT"
UPLOAD.DIRECTORY$ = "99"
UPLOAD.PATH$ = D$
UPLOAD.SUBDIR$ = ""
UPLOAD.TIME.FACTOR! = 0
UPLOAD.TO.SUBDIR = FALSE
USE.BASIC.WRITES = FALSE
USE.DEVICE.DRIVER$ = "" ' KG080901
USER.LOCATION$ = "CITY and STATE"
UTIL.COMMANDS.DEFAULTS$ = "BCEFGLMPRSTU"
UTIL.COMMANDS$ = UTIL.COMMANDS.DEFAULTS$
UTILITY.FUNCTION$(1,1) = "B)aud rate "
UTILITY.FUNCTION$(2,1) = "C)lock (time) "
UTILITY.FUNCTION$(3,1) = "E)cho "
UTILITY.FUNCTION$(4,1) = "F)ile x-fer protocol "
UTILITY.FUNCTION$(5,1) = "G)raphics "
UTILITY.FUNCTION$(6,1) = "L)ines per page "
UTILITY.FUNCTION$(7,1) = "M)sg margin setting "
UTILITY.FUNCTION$(8,1) = "P)assword change "
UTILITY.FUNCTION$(9,1) = "R)eview defaults "
UTILITY.FUNCTION$(10,1) = "S)tatistics "
UTILITY.FUNCTION$(11,1) = "T)oggle "
UTILITY.FUNCTION$(12,1) = "U)ser log scan "
VOICE.TYPE = 0
VOICE.TYPE$ = NONE.PICKED$
XON.XOFF = FALSE
FOR I = 1 TO LEN(UTIL.COMMANDS.DEFAULTS$)
UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS.DEFAULTS$,I,1)
NEXT
WAIT.BEFORE.DISCONNECT = 180
WELCOME.FILE$ = D$ + "WELCOME"
WELCOME.INTERRUPTABLE = TRUE
WILL.SUBDIRS.B.USED = FALSE
WRITE.BUF.DEF = 1024
FOR I = 1 TO NUM.SYSOP
SYSOP.FUNCTION(I) = SF
NEXT
FOR I = 1 TO NUM.MAIN
MAIN.FUNCTION(I) = MM
NEXT
FOR I = 1 TO NUM.FILES
FILES.FUNCTION(I) = FC
NEXT
FOR I = 1 TO NUM.LIBRARY
LIBRARY.FUNCTION(I) = PS
NEXT
FOR I = 1 TO NUM.UTILITY
UTILITY.FUNCTION(I) = UE
NEXT
FOR I = 1 TO NUM.GLOBAL
GLOBAL.FUNCTION(I) = GB
NEXT
CALL MODEMINITCMD
END SUB
' $SUBTITLE: 'VOICETYPE - subroutine to select voice'
' $PAGE
'
' SUBROUTINE NAME -- VOICETYPE
'
' INPUT PARAMETERS -- VOICE.TYPE
' VOICE.TYPE$
' SUBROUTINE.PARAMETER
'
' OUTPUT PARAMETERS -- VOICE.TYPE
' VOICE.TYPE$
'
' SUBROUTINE PURPOSE -- TO SELECT THE RBBS-PC SUPPORTED VOICE
' SYNTHESIZERS
'
SUB VOICETYPE STATIC
ON SUBROUTINE.PARAMETER GOTO 60482,60484
62100 ' set modem strings by selecting a modem
SUB SELMODEM STATIC
CALL FINDFILE ("MODEMS.SET",OK)
IF OK THEN _
GOTO 62103 ' DA080503
CALL MODEMINITCMD ' KG080901
EXIT SUB ' DA080503
62120 SUB MODEMINITCMD STATIC ' KG080901
RTS$ = "NO" ' DA080503
MODEM.INIT.WAIT.TIME = 3 ' DA080503
COMMANDS.BETWEEN.RINGS = FALSE ' DA080503
FIRMWARE.INITIALIZE.COMMAND$ = "AT&C1&D3B1E0V1M0S0=0&T5" ' DA080503
FIRMWARE.CLEAR.COMMAND$ = "AT&F" ' DA080503
FIRMWARE.WRITE.COMMAND$ = "AT&W" ' DA080503
KEEP.INIT.BAUD = FALSE ' DA080503
MODEM.ANSWER.COMMAND$ = "ATQ0X1V1A"
MODEM.COMMAND.DELAY.TIME = 1
MODEM.COUNT.RINGS.COMMAND$ = "ATS1?"
MODEM.GO.OFFHOOK.COMMAND$ = "ATH1M0" ' DA080503
'MODEM.GO.OFFHOOK.COMMAND$ = "ATQ1E1H1M0"
MODEM.INIT.BAUD$ = "300"
MODEM.INIT.COMMAND$ = "ATE0M0Q0V1X1S0=254S2=255S10=20" ' DA080503
'MODEM.INIT.COMMAND$ = "ATM0Q1S2=255S10=30E0Q0X1S0=254 "
MODEM.RESET.COMMAND$ = "ATZ"
USER.INITIALIZE.COMMAND$ = "AT&C1&D3B1E0V1M0S0=0" ' DA080503
'USER.INITIALIZE.COMMAND$ = "AT&C1&D3B1E0V1M0S0=0&T5"
'USER.FIRMWARE.WRITE.CMND$ = "&W"
USER.ANSWER.COMMAND$ = MODEM.ANSWER.COMMAND$ ' DA080503
USER.COUNT.RINGS.COMMAND$ = MODEM.COUNT.RINGS.COMMAND$ ' DA080503
USER.GO.OFFHOOK.COMMAND$ = MODEM.GO.OFFHOOK.COMMAND$ ' DA080503
USER.INIT.COMMAND$ = MODEM.INIT.COMMAND$ ' DA080503
USER.RESET.COMMAND$ = MODEM.RESET.COMMAND$ ' DA080503
USER.INITIALIZE.COMMAND$ = FIRMWARE.INITIALIZE.COMMAND$ ' DA080503
USER.FIRMWARE.CLEAR.CMND$ = FIRMWARE.CLEAR.COMMAND$ ' DA080503
USER.FIRMWARE.WRITE.CMND$ = FIRMWARE.WRITE.COMMAND$ ' DA080503
END SUB ' KG080901
------------------------[ ML080801 ]-------------------------
Problem: Sometimes RBBS not dropping to DOS when it should.
Solution: Change RBBSSUB3.BAS as follows:
(line 41010)
SUB TimeRemain (MinsRemaining) STATIC
TOA! = FRE("A")
IF ZBypassTimeCheck THEN _
MinsRemaining = ZSecsPerSession! / 60 : _
EXIT SUB
CALL CheckTime (ZUserLogonTime!, ZSecsUsedSession!, 2)
IF ZTimeToDropToDos! = 0 OR _
ZOldDate$ = DATE$ THEN _
GOTO 41020
CALL CheckTime (ZTimeToDropToDos!, HowMuchTimeLeft!, 1)
IF HowMuchTimeLeft! < 0 THEN _ ' ML080801
HowMuchTimeLeft! = (HowMuchTimeLeft! * -1) + 43200 ' ML080801
IF (ZSecsPerSession! - ZSecsUsedSession!) > HowMuchTimeLeft! THEN _ ' DA080101
ZSecsPerSession! = HowMuchTimeLeft! + ZSecsUsedSession! : _ ' DA080101
IF NOT ToldShort THEN _
ToldShort = ZTrue : _
ZOutTxt$ = "Shortened session time to" + _ ' DA080101
STR$(INT((ZSecsPerSession! - ZSecsUsedSession!) / 60)) + _ ' DA080101
" min for scheduled event" : _ ' DA080101
CALL RingCaller
------------------------[ ML080801 ]-------------------------
Problem: RBBS can object to an upload because have file with same prefix
but different extension. In which case, if uploader can overwrite, RBBS
asks if want to overwrite, yet file will NOT be overwritten and RBBS will
trap an error if the uploaded file does not exist.
Solution: Tell file already have and ask if want to upload anyway. If
file try to kill is not there, just permit upload.
Change RBBSSUB5.BAS as follows:
20450 IF Extension$ <> Check$ THEN _
CALL RotorsDir (WasX$ + "." + Check$,ZSubDir$(),ZSubDirCount,ZTrue,"U") : _ ' KG021802
IF ZOK THEN _
ExtSrch = ZTrue : _ ' ML080601
GOTO 20452
GOTO 20447
20451 ZOutTxt$ = "Invalid file name <" + ZFileName$ + ">"
GOTO 20395
20452 IF ZUserSecLevel < ZOverWriteSecLevel THEN _
GOTO 20453
IF ExtSrch AND (WasX$ + "." + Check$) <> ZFileName$ THEN _ ' ML080601
ZOutTxt$ = WasX$ + "." + Check$ + " already here, " + _ ' ML080601
"upload anyway (Y,[N])" _ ' ML080601
ELSE ZOutTxt$ = "Overwrite file (Y,[N])" ' ML080601
GOSUB 21660
IF ZFileSysParm > 1 THEN _
RETURN
IF NOT ZYes THEN _
GOTO 20453
ZWasZ$ = ZFileName$
CALL KillWork (ZFileName$)
IF ZErrCode <> 0 AND ZErrCode <> 53 THEN _ ' ML080601
ZOutTxt$ = "Unable to overwrite" : _ ' ML080601
GOSUB 21660 : _ ' ML080601
RETURN ' ML080601
GOTO 20475
21900 IF ZDebug THEN _
ZOutTxt$ = "RBBSSUB5 DEBUG Error Trap Entry ERL=" + _
STR$(ZWasEL) + _
" ERR=" + _
STR$(ZErrCode) : _
IF ZPrinter THEN _
CALL Printit(ZOutTxt$) _
ELSE CALL LPrnt(ZOutTxt$,1)
IF ZWasEL = 20126 AND ZErrCode = 53 THEN _
GOTO 20142
IF ZWasEL = 20242 AND ZErrCode = 62 THEN _
CALL UpdtCalr (ZFileSecFile$ + " bad format!",2) : _
GOTO 20247
IF ZWasEL = 20263 THEN _
ZOutTxt$ = "<Download aborted>" : _
DnldCompleted = ZFalse : _
GOTO 20390 ' ML080601
IF ZWasEL = 20560 AND ZErrCode = 67 THEN _
GOTO 20451
IF ZWasEL = 20560 AND ZErrCode = 70 THEN _
IF VAL(ZFreeSpace$) > 1999 THEN _
GOTO 20610 _
ELSE CALL QuickTPut1 ("No room for uploads. Try tomorrow.") : _
GOTO 21700
IF ZWasEL = 20620 THEN _
GOTO 20670
IF ZWasEL = 20650 THEN _
GOTO 20670
IF ZWasEL = 20736 AND ZErrCode = 53 THEN _
GOTO 21700
IF ZWasEL = 20900 AND ZErrCode = 75 THEN _
GOTO 21230
IF ZWasEL = 20900 AND ZErrCode = 70 THEN _
CALL QuickTPut1 ("No room for uploads. Try tomorrow.") : _
GOTO 21230
IF ZWasEL = 21131 OR ZWasEL = 21220 THEN _
ZErrCode = 0 : _
GOTO 21230
IF ZWasEL = 21480 THEN _
CALL LogError : _
IF ZErrCode = 57 THEN _
CALL QuickTPut1 ("Error reading file. Aborting download") : _
DnldCompleted = ZFalse : _
GOTO 21230
------------------------[ DA080503 ]-------------------------
Problem: Make it easier for person to select a modem's configuration
parameters by displaying a screen full rather than one at a time,
and add two more important communications parameters to
setting in MODEMS.SET - baud rate to open, whether lock baud rate.
Also, code changed to allow S0 parm in modem commands to be anywhere
in the string.
Change CONFIG.BAS as follows:
13228 A$ = ""
IF INSTR(USER.INIT.COMMAND$,"S0=") = 0 THEN _ ' DA080503
USER.INIT.COMMAND$ = USER.INIT.COMMAND$ + "S0=001" ' DA080503
13229 CALL GETINIT ("How many rings should RBBS-PC wait before answering? ",24,0,255,REQUIRED.RINGS,CR)
IF CR THEN _
GOTO 13229
IF REQUIRED.RINGS = 0 THEN _
MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3) = "001" ' DA080503
RETURN
13235 IF REQUIRED.RINGS > 5 THEN _
A$ = "(<6 for ringback)" : _
GOTO 13229
MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3) = "255" ' DA080503
RETURN
13237 MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3) = "254" ' DA080503
RETURN
15710 CLS
GOSUB 15780
PRINT " Currently Specified Modem Commands are:"
PRINT
PRINT " Note: '{' means embed carriage return '~' means delay 1 sec"
PRINT
PRINT "1. Reset the modem : " + USER.RESET.COMMAND$
PRINT ""
PRINT "2. Initialize the modem : " + USER.INIT.COMMAND$
PRINT " Note: Item 2 MUST contain one of the following:" ' DA080503
PRINT " S0=001 (to answer on 0 rings)" ' DA080503
PRINT " S0=254 (to answer on >0 rings, no ring-back)" ' DA080503
PRINT " S0=255 (to answer on >0 rings, with ring-back"
PRINT ""
PRINT "3. Count the number of rings : " + USER.COUNT.RINGS.COMMAND$
PRINT ""
PRINT "4. Answer the phone : " + USER.ANSWER.COMMAND$
PRINT ""
PRINT "5. Take the phone off the hook : " + USER.GO.OFFHOOK.COMMAND$
PRINT ""
PRINT "6. Clear the modem's firmware : " + USER.FIRMWARE.CLEAR.CMND$
PRINT ""
PRINT "7. Initialize modem's firmware : " + USER.INITIALIZE.COMMAND$ ' DA080503
PRINT ""
PRINT "8. Write to modem's firmware : " + USER.FIRMWARE.WRITE.CMND$
CALL GETINIT ("Command to change (1 to 8), CR to end, or 0 to reset to defaults",24,0,8,I,CR)
IF CR THEN _
RETURN
IF I <> 0 THEN _
GOTO 15711
GOSUB 15790
GOTO 15710
15790 CALL SELMODEM ' DA080503
RETURN
Change CNFG-SUB.BAS as follows:
12500 DISPLAYED.PAGE.NUMBER = 12
GOSUB 24800
LOCATE 3,1
PRINT "221. Communications port to be used by RBBS-PC ---- " + COM.PORT$
PRINT "222. # of seconds to wait for modem to initialize -" + STR$(MODEM.INIT.WAIT.TIME)
PRINT "223. Seconds to wait before issuing modem commands-" + STR$(MODEM.COMMAND.DELAY.TIME)
PRINT "224. Number of rings to wait before answering -----" + STR$(REQUIRED.RINGS);
IF INSTR(USER.INIT.COMMAND$, "S0=255") > 0 THEN _ ' DA080503
PRINT " RING BACK";
PRINT
PRINT "225. Set the modem commands"
PRINT "226. ---------------------------------------------- "
PRINT "227. Issue modem commands between rings ----------- " ; FNYESNO$(COMMANDS.BETWEEN.RINGS)
PRINT "228. Baud rate to initially open modem at --------- " + MODEM.INIT.BAUD$
X$ = STR$(WAIT.BEFORE.DISCONNECT) + " seconds"
IF WAIT.BEFORE.DISCONNECT = 0 THEN _
X$ = "NO"
PRINT "229. Log off user who are idle for ----------------" + X$
PRINT "230. Are you using a 'DUMB' auto-answer modem? ---- " ; FNYESNO$(DUMB.MODEM)
PRINT "231. Initialize modem firmware for RBBS-PC."
PRINT "232. # seconds to wait after dropping DTR ---------" + STR$(DTR.DROP.DELAY)
PRINT "233. File with PROTOCOL definitions --------------- " + PROTO.DEF$
PRINT "234. Always check caller for AUTODOWNLOAD support - " ; FNYESNO$(ASK.IDENTITY)
PRINT "235. Require non-ascii protocol for BASIC files --- " ; FNYESNO$(REQUIRE.NON.ASCII)
X$ = STR$(RECYCLE.WAIT) + " minutes"
IF RECYCLE.WAIT = 0 THEN _
X$ = "<Don't recycle>"
PRINT "236. Recycle if no calls are received within ------" + X$
PRINT "237. Leave modem at initial baud ------------------ " + FNYESNO$(KEEP.INIT.BAUD)
GOTO 12580
62100 ' set modem strings by selecting a modem
SUB SELMODEM STATIC
CALL FINDFILE ("MODEMS.SET",OK)
IF OK THEN _
GOTO 62103 ' DA080503
CALL MODEMINITCMD ' KG080901
EXIT SUB ' DA080503
62103 CLOSE 2 ' DA080503
IF NETWORK.TYPE = 6 THEN _ ' DA080503
OPEN "MODEMS.SET" FOR INPUT SHARED AS #2 _ ' DA080503
ELSE OPEN "I",2,"MODEMS.SET" ' DA080503
MODEM.MODEL = 0
62105 CLS ' DA080503
PRINT "NUMBER";
LOCATE 1,10
PRINT "Modem Model";
LOCATE 1,40
PRINT "Switch Settings";
LOCATE 2,1
PRINT STRING$(78,"-");
FOR DISPLAY.LINE = 3 TO 19
IF EOF(2) THEN _
MODEM.PAGE = 0 : _
GOTO 62110
MODEM.MODEL = MODEM.MODEL + 1
INPUT #2, MODEM.MODEL$, SWITCHES$
FOR I = 1 TO 14 ' # MODEMS.SET parms - 2
INPUT #2,GARBAGE$
NEXT
LOCATE DISPLAY.LINE, 2
PRINT MODEM.MODEL;
LOCATE DISPLAY.LINE, 10
PRINT MODEM.MODEL$;
LOCATE DISPLAY.LINE, 40
PRINT SWITCHES$;
NEXT
MODEM.MODEL = MODEM.MODEL + 1
MODEM.PAGE = MODEM.MODEL
LOCATE DISPLAY.LINE + 1, 2
PRINT " 0"
LOCATE DISPLAY.LINE + 1, 10
PRINT "Next Page"
62110 LOCATE 24,10 ' DA080503
PRINT "Use Parameter 231 to initialize modem's firmware";
CALL GETINIT("Select modem number, or [ENTER] to exit", _
22,0,MODEM.MODEL,MODEM.SELECTED, CR)
IF CR THEN _
EXIT SUB
IF MODEM.SELECTED = 0 THEN _
MODEM.MODEL = MODEM.MODEL - 1 : _
GOTO 62105
CLOSE 2
IF NETWORK.TYPE = 6 THEN _
OPEN "MODEMS.SET" FOR INPUT SHARED AS #2 _
ELSE OPEN "I",2,"MODEMS.SET"
FOR I = 1 TO (MODEM.SELECTED - 1) * 16 ' # of parms * modem
INPUT #2,GARBAGE$
NEXT
INPUT #2, MODEM.MODEL$, _
SWITCHES$, _
USER.ANSWER.COMMAND$, _
USER.COUNT.RINGS.COMMAND$, _
USER.GO.OFFHOOK.COMMAND$, _
USER.INIT.COMMAND$, _
USER.RESET.COMMAND$, _
USER.INITIALIZE.COMMAND$, _
USER.FIRMWARE.CLEAR.CMND$, _
USER.FIRMWARE.WRITE.CMND$, _
RTS$, _
MODEM.INIT.WAIT.TIME, _
MODEM.COMMAND.DELAY.TIME, _
COMMANDS.BETWEEN.RINGS, _
MODEM.INIT.BAUD$, _
KEEP.INIT.BAUD
CLOSE 2
END SUB
------------------------[ DA080502 ]-------------------------
Problem: As a aid in seeing whether the modem firmware initialization
took, display any modem response. Also, support pause (~) and carriage-
return ({) substitution in firmware initialization.
23731 LOCATE 25,5
COMPORT% = VAL(RIGHT$(COM.PORT$,1)) -1
IF COMPORT% < 0 THEN _
PRINT "COM port cannot be set while using COM0" : _
DELAY! = FNTI! + 3 : _
GOSUB 60440 : _
RETURN
FOS.BUF$ = SPACE$(80) ' DA080502
CLS ' DA080502
PRINT "Setting modem firmware for RBBS-PC on " + COM.PORT$ ' DA080502
IF NOT FOSSIL THEN _ ' DA080502
GOTO 23732 ' DA080502
CALL FOSINIT(COMPORT%,RESULT%) ' DA080502
IF RESULT% = -1 THEN _ ' DA080502
PRINT "ERROR initializing FOSSIL. Firmware reset aborted." : _ ' DA080502
GOTO 23736 ' DA080502
CALL FOSSPEED(COMPORT%,2400, 2, 3, 1) ' DA080502
STATE% = 1 ' DA080502
CALL FOSDTR(COMPORT%,STATE%) ' DA080502
GOTO 23733 ' DA080502
'
'
' * WHEN INITIALIZING THE HAYES 2400 VOLITILE MEMORY, SET THE FOLLOWING:
'
' * &C1 = Indicate carrier detect if user is on-line
' * &D3 = Use these settings when DTR drops
' * B1 = Use Bell 212A when 1200 Baud is detected
' * E0 = Do not echo modem commands back to the PC
' * V1 = Issue long form of results codes
' * M0 = Disable the speaker
'
'
23732 OUT MODEM.CONTROL.REGISTER,&H0 ' DA080501
OUT LINE.CONTROL.REGISTER - 1,&H6 ' DA080501
OPEN COM.PORT$ + ":2400,N,8,1,CD,DS" AS #3 ' DA080502
23733 A$ = USER.FIRMWARE.CLEAR.CMND$ ' Clear to factory defaults ' DA080502
GOSUB 23736 ' DA080502
A$ = USER.INITIALIZE.COMMAND$ ' set up RBBS-PC config ' DA080502
GOSUB 23736 ' DA080502
A$ = USER.FIRMWARE.WRITE.CMND$ ' Write changes to NVRam ' DA080502
GOSUB 23736 ' DA080502
IF FOSSIL THEN _ ' DA080502
STATE% = 0 : _ ' DA080502
CALL FOSDTR(COMPORT%,STATE%) : _ ' DA080502
CALL FOSEXIT(COMPORT%) : _ ' DA080502
ELSE CLOSE #3 ' DA080502
PRINT "Press a key to continue" ' DA080502
WHILE INKEY$ = "" : WEND ' DA080502
RETURN ' DA080502
' ' DA080502
' * ROUTINE TO SEND/RECEIVE DATA FROM MODEM ' DA080502
' ' DA080502
23736 PRINT "Send:" ' DA080502
WHILE INSTR(A$, "{") ' DA080502
CR.FOUND = INSTR(A$,"{") ' DA080502
A$ = LEFT$(A$, CR.FOUND - 1) + CHR$(13) + CHR$(10) + _ ' DA080502
MID$(A$, CR.FOUND + 1) ' DA080502
WEND ' DA080502
WHILE INSTR(A$, "~") ' DA080502
WAIT.FOUND = INSTR(A$,"~") ' DA080502
TEMP.A$ = MID$(A$, WAIT.FOUND + 1) ' DA080502
A$ = LEFT$(A$, WAIT.FOUND - 1) ' DA080502
GOSUB 23739 ' DA080502
DELAY! = FNTI! + 1 ' DA080502
GOSUB 60440 ' DA080502
A$ = TEMP.A$ ' DA080502
WEND ' DA080502
A$ = A$ + CHR$(13) + CHR$(10) ' DA080502
GOSUB 23739 ' DA080502
DELAY! = FNTI! + 3 ' DA080502
GOSUB 60440 ' DA080502
PRINT "Receive:" ' DA080502
IF NOT FOSSIL THEN _ ' DA080502
GOTO 23738 ' DA080503
FOS.LEN% = 80 ' DA080503
CALL FOSREAD(COMPORT%, FOS.LEN%, FOS.BUF$) ' DA080502
PRINT LEFT$(FOS.BUF$,FOS.LEN%) ' DA080503
RETURN ' DA080502
23738 WHILE LOC(3) > 1 ' DA080502
INPUT #3, A$ ' DA080502
PRINT A$ ' DA080502
WEND ' DA080502
RETURN ' DA080502
23739 PRINT A$; ' DA080502
IF NOT FOSSIL THEN_ ' DA080502
PRINT #3, A$; _ ' DA080502
ELSE _ ' DA080502
CALL FOSWRITE(COMPORT%,LEN(A$),A$) ' DA080502
RETURN ' DA080502
'
' * ROUTINE TO RENUMBER THE MESSAGE FILE
'
------------------------[ DA080501 ]-------------------------
Problem: Config will not properly initialize modem's firmware when
have 16550 UART chip with FIFO enabled, on some systems (not all).
Solution: Disable FIFO. Change
23732 OUT MODEM.CONTROL.REGISTER,&H0 ' DA080501
OUT LINE.CONTROL.REGISTER - 1,&H6 ' DA080501
OPEN COM.PORT$ + ":2400,N,8,1,CD,DS" AS #3 ' DA080502
------------------------[ KG080701 ]-------------------------
Problem: Possible to get continuous looping in conference
view command when doing non-stop. Also, erratic skipping
when caller not in various conferences. Redundant line of
code eliminated.
Change RBBSSUB4.BAS as follows:
59852 IF NOT ZOK THEN _
GOTO 59854 _ ' KG072101
ELSE IF EOF(2) THEN _ ' KG072101
IF LogicalEOF$ = "" OR SkipParms = 0 THEN _ ' KG073104
GOTO 59854 _ ' KG072101
ELSE CALL FindIt (ZConfMailList$) : _ ' KG072101
SkipParms = 0 : _ ' KG072901
GOTO 59852 ' KG072101
CALL ReadAny
ZActiveUserFile$ = ZOutTxt$
CALL ReadAny
IF ZErrCode > 0 THEN _
GOTO 59854
SkipParms = SkipParms + 2 ' KG080701
ZActiveMessageFile$ = ZOutTxt$ ' KG072901
CALL FindFile (ZActiveUserFile$,ZOK)
IF NOT ZOK THEN _
GOTO 59854
CALL OpenUser (HighestUserRecord)
FIELD 5, 128 AS ZUserRecord$
CALL FindFile (ZActiveMessageFile$,ZOK)
IF NOT ZOK THEN _
GOTO 59854
CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
0,0,HighestUserRecord,_
Found,HoldUserFileIndex,ZWasSL)
IF NOT Found THEN _
GOTO 59853 ' KG080701
CALL OpenMsg
FIELD 1, 128 AS ZMsgRec$
GET 1,1
AnyMail = ZTrue
WasX = CVI(MID$(ZUserRecord$,57,2))
WasX = (WasX AND 512) > 0
CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
IF InCur THEN _
WasX = ZMailWaiting : _ ' KG030101
ZWasA = ZLastMsgRead _
ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
ZWasB = VAL(LEFT$(ZMsgRec$,8))
WasZ = (ZWasB - ZWasA)
IF WasZ < 0 THEN _
ZWasA = 0 : _
WasZ = ZWasB _
ELSE IF WasZ = 0 THEN _
WasX = ZFalse
ZOutTxt$ = MID$(STR$((ZWasB > ZWasA) * WasZ),2)
ZWasSL = LEN(ZOutTxt$)
ZOutTxt$ = SPACE$(-(ZWasSL<4) * (4-ZWasSL)) + ZOutTxt$
ZWasSL = LEN(CurPre$)
IF CurPre$ = "USERS" AND CurExt$ = "" THEN _
Conf$ = "MAIN" _
ELSE Conf$ = LEFT$(CurPre$,ZWasSL-1)
ZWasY$ = Conf$ + SPACE$(-(ZWasSL<8) * (8-ZWasSL))
IF WasX THEN _
WasX$ = ZEmphasizeOn$ : _
ZWasZ$ = ZEmphasizeOff$ _
ELSE WasX$ = "" : _
ZWasZ$ = ""
ZOutTxt$ = ZWasY$ + ": " + ZOutTxt$ + " new message(s): " + _
WasX$ + MID$(" None *Some*",-6 * WasX + 1,6) + " to you" + ZWasZ$
ZSubParm = 5
CALL TPut
IF SkipJoinUnjoin THEN _
CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) : _
GOTO 59853 ' KG080701
ZTurboKey = -ZTurboKeyUser
CALL AskMore (",J)oin,U)njoin",ZTrue,ZFalse,WasX,ZFalse)
IF ZNo THEN _
GOTO 59854
WasX$ = LEFT$(ZUserIn$(1),1)
CALL AllCaps (WasX$)
IF WasX$ = "J" THEN _
ZHomeConf$ = Conf$ : _
GOTO 59854
IF WasX$ = "U" THEN _
IF InCur OR (OrigPre$ = CurPre$ AND OrigExt$ = CurExt$) THEN _
CALL QuickTPut1 ("Can't omit yourself from the board or conference you're in") _
ELSE LSET ZUserRecord$ = CHR$(0) + "deleted user" : _
ZUserFileIndex = HoldUserFileIndex : _
ZSubParm = 6 : _
CALL FileLock : _
PUT 5, HoldUserFileIndex : _
ZSubParm = 8 : _
CALL FileLock : _
CALL QuickTPut1 ("Omitted you from " + Conf$) ' KG073104
59853 IF ZActiveMessageFile$ = LogicalEOF$ THEN _ ' KG073104
GOTO 59854 ' KG073104
IF NOT ZRet THEN _ ' KG073104
GOTO 59852 ' KG080701
------------------------[ KG080601 ]-------------------------
Problem: The privileges associated with a subboard should not
apply to joining other conferences. Because people in the
subboard can be SubOps. Yet current code uses current security
level to decide what conferences can join, rather than original
security level. So people are able to join other conferences
after joining a subboard, that they could not join upon logon.
Solution: Change RBBS-PC.BAS as follows:
5335 IF Found THEN _
GOSUB 9500 : _
ZMainUserFileIndex = -(SubBoard * ZUserFileIndex)_
-((NOT SubBoard) * ZMainUserFileIndex) : _
Temp = -(SubBoard * ZMinLogonSec) _
-((NOT SubBoard) * AutoAddSec) : _
WasI = (ZUserSecLevel < OrigMainSec) : _
WasJ = (ZUserSecLevel < Temp) : _
WasK = (WasI AND WasJ) : _
IF WasK THEN _
ZOutTxt$ = "you have been locked out of" : _
GOTO 5341 _
ELSE GOSUB 5375 : _
GOTO 5345
'
' **** USER NOT FOUND. AUTO-ADD TO SUBBOARD IF SUFFICIENT SECURITY ***
'
ZNewUser = SubBoard
IF SubBoard THEN _
AutoAddSec = ZMinLogonSec
IF (ZOrigSec >= AutoAddSec) AND _ ' KG080601
(ZUserFileIndex > 0) AND (ZMainUserFileIndex > 0) THEN _
LSET ZUserRecord$ = UserRecordHold$ : _
CALL QuickTPut1 ("MEMBER privileges granted in " + ZConfName$) : _
MID$(ZUserOption$,3,2) = MKI$(0) : _
MID$(ZUserOption$,1,2) = MKI$(0) : _
ZActiveUserName$ = LEFT$(UserRecordHold$,30) : _
CALL Trim (ZActiveUserName$) : _
Temp = -(SubBoard * ZDefaultSecLevel) _
-((NOT SubBoard) * ZUserSecSave) : _
GOSUB 5370 : _
Temp = -(ZWasA * ZSysopSecLevel) - ((NOT ZWasA) * Temp) : _
LSET ZSecLevel$ = MKI$(Temp) : _
ZUserSecLevel = Temp : _
GOSUB 5375 : _
ZPageLength = ZPageLengthDef : _
GOSUB 12986 : _
GOSUB 12630 : _
UpdateDate = ZTrue : _
Found = ZTrue : _
GOTO 5335
IF ZOrigSec >= AutoAddSec THEN _ ' KG080601
CALL QuickTPut1 ("GUEST privileges granted in " + ZConfName$) : _
ZActiveUserFile$ = PrevUser$ : _
UpdateDate = ZFalse : _
ZUserFileIndex = PrevIndex : _
GOSUB 5382 : _
ZUserFileIndex = 0 : _
GOTO 5345
ZNewUser = ZFalse
------------------------[ KG080501 ]-------------------------
Problem: In personal mail scan, some mail from the caller may
fail to be displayed. This can occur when the msg base contains
enough killed messages to exceed the maximum number of messages.
Solution: Change RBBS-PC.BAS as follows:
1940 MsgsFromUser = MsgsFromUser + 1 ' KG080501
WasA1$ = WasA1$ + LEFT$(ZMsgRec$,5) ' KG080501
------------------------[ KG080401 ]-------------------------
Problem: Library section not correctly informing caller of
the extension of the file prepared for downloading when the
extension created is not the default extension (e.g. default
is ZIP but using ARCA to compress). Should now match based
on program used to do archiving. Also, a string shortened.
Solution: Problems were caused by not using right variables.
Change RBBSSUB3.BAS as follows:
21110 IF ZLibDiskChar$ = "0000" THEN _
ZOutTxt$ = "No Library disk currently selected" _
ELSE ZOutTxt$ = "Library disk " + _
ZLibDiskChar$ + _
" selected - " + _
DiskTitle$
CALL QuickTPut1 (ZOutTxt$)
IF LibDiskArc$ = "" THEN _
EXIT SUB
IF INSTR(ZLibArcProgram$,"ARC") THEN _ ' KG080401
Extension$ = "ARC" _
ELSE IF INSTR(ZLibArcProgram$,"ZIP") THEN _ ' KG080401
Extension$ = "ZIP" _
ELSE IF INSTR(ZLibArcProgram$,"LHA") THEN _ ' KG080401
Extension$ = "LHZ" _
ELSE Extension$ = ZDefaultExtension$
FOR LibDisplayCount = 0 TO LibLoopCount - 1
IF LibSubdirName$(LibDisplayCount) <> "" THEN _
CALL QuickTPut1 (LibSubdirName$(LibDisplayCount) + _
"." + Extension$ + " ready for transmission!")
NEXT
EXIT SUB
21130 IF ZLibType <> 1 THEN _
EXIT SUB
CALL SkipLine(1)
ZOutTxt$ = "The PC-SIG Library file that you are about to" ' KG080401
CALL QuickTPut1 (ZOutTxt$)
ZOutTxt$ = "download can also be ordered as DISK " + _
ZLibDiskChar$
CALL QuickTPut1 (ZOutTxt$)
ZOutTxt$ = "from PC-SIG, 1030D East Duane Ave. Sunnyvale, Ca. 94086"
CALL QuickTPut (ZOutTxt$,2)
EXIT SUB
21153 CALL OpenWork (2,Treedir$)
LibSubdirCount = 0
WHILE NOT EOF(2)
LINE INPUT #2, Dirrec$
IF LEFT$(Dirrec$,1) <> "." THEN _
LibSubdirCount = LibSubdirCount + 1 : _
LibSubdirName$(LibSubdirCount) = _
LEFT$(Dirrec$,8)
WEND
CLOSE 2
LibLoopCount = 1
IF LibSubdirCount = 0 THEN _
GOTO 21156
ZOutTxt$ = STR$(LibSubdirCount) + _
" Subdirectories on Library disk - " + _
ZLibDiskChar$
CALL QuickTPut1 (ZOutTxt$)
FOR LibLoopCount = 1 TO LibSubdirCount
IF NOT ZLocalUser THEN _
CALL Carrier : _
IF ZSubParm THEN _
GOTO 21155
LibSubdirChar$ = MID$("ABCDEFGHI",LibLoopCount,1)
ZOutTxt$ = "Creating " + _
ZLibNodeID$ + _
"DK" + _
ZLibDiskChar$ + _
LibSubdirChar$ + "." + Extension$ + _ ' KG080401
" using " + ZLibArcProgram$
CALL QuickTPut1 (ZOutTxt$)
CHDIR ChdirLib$ + _
"\" + _
LibSubdirName$(LibLoopCount)
GOSUB 21157
ZOutTxt$ = "Disk - " + _
ZLibDiskChar$ + _
"; Subdirectory" + _
" -" + _
STR$(LibLoopCount) + _
" archived for download"
CALL QuickTPut1 (ZOutTxt$)
GOSUB 21158
------------------------[ KG080301 ]-------------------------
Problem: In config, the variable NONE.PICKED$ should be used
everywhere for display when an option allows none to be picked.
Change CONFIG.BAS as follows:
26080 CALL GETINIT ("Select network mail type (0 to 5, CR to end)",24,0,5,AB,CR)
NET.MAIL$ = NONE.PICKED$ ' KG080301
IF AB = 1 THEN _
NET.MAIL$ = "SeaDog"
IF AB = 2 THEN _
NET.MAIL$ = "BINKLEY TERM"
RETURN
Change CNFG-SUB.BAS as follows:
12360 DISPLAYED.PAGE.NUMBER = 1
GOSUB 24800
LOCATE 3,1
PRINT " 1. SYSOP's Public First Name -------------------- " + SYSOP.FIRST.NAME$
PRINT " 2. SYSOP's Public Last Name --------------------- " + SYSOP.LAST.NAME$
PRINT " 3. SYSOP's default expert mode at signon -------- " + EXPERT.USER$
PRINT " 4. SYSOP's office hours -------------------------"STR$(START.OFFICE.HOURS);" to"STR$(END.OFFICE.HOURS)
PRINT " 5. Page SYSOP using printer's bell -------------- " + M11$
PRINT " 6. Go off-line whenever a DISK FULL occurs ------ " ; FNYESNO$(DISKFULL.GO.OFFLINE)
PRINT " 7. Prompt bell default is ----------------------- " + PROMPT.BELL$
PRINT " 8. Maximum time per session (in minutes) --------"STR$(MINUTES.PER.SESSION!)
PRINT " 9. Maximum minutes per day ----------------------";STR$(MAX.PER.DAY)
PRINT "10. Factor to extend session time for uploads ----" + STR$(UPLOAD.TIME.FACTOR!)
PRINT "11. # Months of inactivity before user deleted ---"STR$(ACT.MNTHS.B4.DELETING)
PRINT "12. Name of RBBS-PC shown initially is ----------- " + RBBS.NAME$
PRINT "13. Foreground color (for color monitors) is -----"STR$(FG)
PRINT "14. Background color (for color monitors) is -----"STR$(BG)
PRINT "15. The border color (for color monitors) is -----"STR$(BORDER)
PRINT "16. Your CONFIG.SYS contains 'DEVICE=ANSI.SYS'---- " + FNYESNO$(DOSANSI)
IF SMART.TEXT THEN _
SMART.TEXT$ = STR$(SMART.TEXT) _
ELSE SMART.TEXT$ = NONE.PICKED$ ' KG080301
PRINT "17. Control character for SMART TEXT -------------" + SMART.TEXT$
PRINT "18. File with automatic operator page parameters - " ; AUTOPAGE.DEF$
X = INSTR("ANS",LOGON.MAIL.LEVEL$)
IF X < 1 THEN _
X = 1
X$ = MID$("OLD & NEWNEW ONLY NONE",9*X-8,9)
IF X$ = "NONE" THEN _
X$ = NONE.PICKED$
PRINT "19. Personal mail notification level at logon is - " + X$
GOTO 12580
12470 DISPLAYED.PAGE.NUMBER = 9
GOSUB 30040
' MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
MAX.ALLOWED.MSGS.FRM.DEF = MAXIMUM.NUMBER.OF.MSGS
GOSUB 24800
LOCATE 3,1
PRINT "161. Maximum number of concurrent RBBS-PC's -------" + STR$(MAXIMUM.NUMBER.OF.NODES)
MT$ = "single RBBS-PC copy "
IF MAXIMUM.NUMBER.OF.NODES <> 1 THEN _
MT$ = "concurrent RBBS-PC's" : _
SUBROUTINE.PARAMETER = 2 : _
IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 7 THEN _
SUBROUTINE.PARAMETER = 1 : _
CALL NETTYPE : _
ELSE CALL NETTYPE
IF NETWORK.TYPE = 6 THEN _
MT$ = "NETBIOS "
IF NETWORK.TYPE = 7 THEN _
MT$ = "DoubleDOS "
PRINT "162. Environment running " + MT$ + " ------ " + NETWORK.TYPE$
PRINT "163. RBBS-PC 'recycle' method when users log off --- " + RECYCLE.TO.DOS$
FILE$ = MAIN.MESSAGE.FILE$
GOSUB 30180
MAX.MSG.FILE.SIZE.FRM.DEF! = UG
IF CONFERENCE.MODE <> 1 THEN _ ' KG062302
X$ = "MAIN" _ ' KG062302
ELSE X$ = ZConfName$ ' KG062302
PRINT "164. Number of records in " ;X$;" User File ";STRING$(15-LEN(X$),"-");STR$(MAX.USR.FILE.SIZE.FRM.DEF) ' KG062302
IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _ ' KG062302
X$ = "MAIN" _ ' KG062302
ELSE X$ = ZConfName$ ' KG062302
PRINT "165. Number of records in " ;X$;" Message File ";STRING$(12-LEN(X$),"-");STR$(MAX.MSG.FILE.SIZE.FRM.DEF!) ' KG062302
PRINT "166. Maximum number of messages allowed ------------" ; STR$(MAX.ALLOWED.MSGS.FRM.DEF) ' KG062302
PRINT "167. Conference File Maintenance."
IF DEFAULT.EXTENSION$ = "" THEN _ ' KG080101
X$ = NONE.PICKED$ _ ' KG080301
ELSE X$ = DEFAULT.EXTENSION$ ' KG080101
PRINT "168. Default extension for compressed files -------- " ; X$ ' KG080101
PRINT "169. Additional extensions for compressed files ---- " ; COMPRESSED.EXT$
PRINT "170. Message file GROWS in size as messages added -- " ; FNYESNO$(MESSAGES.CAN.GROW)
GOTO 12580
12510 DISPLAYED.PAGE.NUMBER = 14
GOSUB 24800
LOCATE 3,1 ' KG080301
IF TIME.TO.DROP.TO.DOS < 1 THEN _ ' KG080301
TIME.TO.DROP.TO.DOS$ = NONE.PICKED$ _ ' KG080301
ELSE TIME.TO.DROP.TO.DOS$ = STRING$(4 - (LEN(STR$(TIME.TO.DROP.TO.DOS)) - 1),"0") + MID$(STR$(TIME.TO.DROP.TO.DOS),2) ' KG080301
------------------------[ KG080101 ]-------------------------
Problem: Extension for compressed files is added to an upload
when no extension is specified. However, if dealing mainly
with text files, this is wrong and confusing.
Solution: let default extension be empty.
Change CONFIG.BAS as follows:
14845 CALL ASKRO ("Extension for compressed files",24,HJ$)
IF LEN(HJ$) > 3 THEN _ ' KG080101
GOTO 14845
CALL ALLCAPS (HJ$)
DEFAULT.EXTENSION$ = HJ$
RETURN
Change CNFG-SUB.BAS as follows:
12470 DISPLAYED.PAGE.NUMBER = 9
GOSUB 30040
' MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
MAX.ALLOWED.MSGS.FRM.DEF = MAXIMUM.NUMBER.OF.MSGS
GOSUB 24800
LOCATE 3,1
PRINT "161. Maximum number of concurrent RBBS-PC's -------" + STR$(MAXIMUM.NUMBER.OF.NODES)
MT$ = "single RBBS-PC copy "
IF MAXIMUM.NUMBER.OF.NODES <> 1 THEN _
MT$ = "concurrent RBBS-PC's" : _
SUBROUTINE.PARAMETER = 2 : _
IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 7 THEN _
SUBROUTINE.PARAMETER = 1 : _
CALL NETTYPE : _
ELSE CALL NETTYPE
IF NETWORK.TYPE = 6 THEN _
MT$ = "NETBIOS "
IF NETWORK.TYPE = 7 THEN _
MT$ = "DoubleDOS "
PRINT "162. Environment running " + MT$ + " ------ " + NETWORK.TYPE$
PRINT "163. RBBS-PC 'recycle' method when users log off --- " + RECYCLE.TO.DOS$
FILE$ = MAIN.MESSAGE.FILE$
GOSUB 30180
MAX.MSG.FILE.SIZE.FRM.DEF! = UG
IF CONFERENCE.MODE <> 1 THEN _ ' KG062302
X$ = "MAIN" _ ' KG062302
ELSE X$ = ZConfName$ ' KG062302
PRINT "164. Number of records in " ;X$;" User File ";STRING$(15-LEN(X$),"-");STR$(MAX.USR.FILE.SIZE.FRM.DEF) ' KG062302
IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _ ' KG062302
X$ = "MAIN" _ ' KG062302
ELSE X$ = ZConfName$ ' KG062302
PRINT "165. Number of records in " ;X$;" Message File ";STRING$(12-LEN(X$),"-");STR$(MAX.MSG.FILE.SIZE.FRM.DEF!) ' KG062302
PRINT "166. Maximum number of messages allowed ------------" ; STR$(MAX.ALLOWED.MSGS.FRM.DEF) ' KG062302
PRINT "167. Conference File Maintenance."
IF DEFAULT.EXTENSION$ = "" THEN _ ' KG080101
X$ = "<none>" _ ' KG080101
ELSE X$ = DEFAULT.EXTENSION$ ' KG080101
PRINT "168. Default extension for compressed files -------- " ; X$ ' KG080101
PRINT "169. Additional extensions for compressed files ---- " ; COMPRESSED.EXT$
PRINT "170. Message file GROWS in size as messages added -- " ; FNYESNO$(MESSAGES.CAN.GROW)
GOTO 12580
Change RBBSSUB2.BAS as follows:
20141 IF ZAnsIndex >= ZLastIndex THEN _
IF LEN(ZDefaultExtension$) > 0 THEN _ ' KG080101
CALL QuickTPut1 ("Default extension is "+ZDefaultExtension$) ' KG080101
ZOutTxt$ = "What compressed file(s)" + ZPressEnterExpert$
CALL PopCmdStack
IF ZSubParm = -1 OR ZWasQ = 0 THEN _
EXIT SUB
------------------------[ DA080101 ]-------------------------
Problem: When session time shortened to 0 for external event, caller
has no idea that getting logged off for no time remaining.
Solution: Change RBBSSUB3.BAS as follows:
(line 41010)
SUB TimeRemain (MinsRemaining) STATIC
TOA! = FRE("A")
IF ZBypassTimeCheck THEN _
MinsRemaining = ZSecsPerSession! / 60 : _
EXIT SUB
CALL CheckTime (ZUserLogonTime!, ZSecsUsedSession!, 2)
IF ZTimeToDropToDos! = 0 OR _
ZOldDate$ = DATE$ THEN _
GOTO 41020
CALL CheckTime (ZTimeToDropToDos!, HowMuchTimeLeft!, 1)
IF (ZSecsPerSession! - ZSecsUsedSession!) > HowMuchTimeLeft! THEN _ ' DA080101
ZSecsPerSession! = HowMuchTimeLeft! + ZSecsUsedSession! : _ ' DA080101
IF NOT ToldShort THEN _
ToldShort = ZTrue : _
ZOutTxt$ = "Shortened session time to" + _ ' DA080101
STR$(INT((ZSecsPerSession! - ZSecsUsedSession!) / 60)) + _ ' DA080101
" min for scheduled event" : _ ' DA080101
CALL RingCaller
------------------------[ KG073104 ]-------------------------
Problem: (fix to a fix) When do a "v c" after a join inside a
view, conferences would endless display.
Solution: Change RBBSSUB4.BAS as follows:
59852 IF NOT ZOK THEN _
GOTO 59854 _ ' KG072101
ELSE IF EOF(2) THEN _ ' KG072101
IF LogicalEOF$ = "" OR SkipParms = 0 THEN _ ' KG073104
GOTO 59854 _ ' KG072101
ELSE CALL FindIt (ZConfMailList$) : _ ' KG072101
SkipParms = 0 : _ ' KG072901
GOTO 59852 ' KG072101
CALL ReadAny
ZActiveUserFile$ = ZOutTxt$
CALL ReadAny
IF ZErrCode > 0 THEN _
GOTO 59854
ZActiveMessageFile$ = ZOutTxt$ ' KG072901
CALL FindFile (ZActiveUserFile$,ZOK)
IF NOT ZOK THEN _
GOTO 59854
CALL OpenUser (HighestUserRecord)
FIELD 5, 128 AS ZUserRecord$
CALL FindFile (ZActiveMessageFile$,ZOK)
IF NOT ZOK THEN _
GOTO 59854
CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
0,0,HighestUserRecord,_
Found,HoldUserFileIndex,ZWasSL)
IF NOT Found THEN _
GOTO 59852
CALL OpenMsg
FIELD 1, 128 AS ZMsgRec$
GET 1,1
AnyMail = ZTrue
WasX = CVI(MID$(ZUserRecord$,57,2))
WasX = (WasX AND 512) > 0
CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
IF InCur THEN _
WasX = ZMailWaiting : _ ' KG030101
ZWasA = ZLastMsgRead _
ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
ZWasB = VAL(LEFT$(ZMsgRec$,8))
WasZ = (ZWasB - ZWasA)
IF WasZ < 0 THEN _
ZWasA = 0 : _
WasZ = ZWasB _
ELSE IF WasZ = 0 THEN _
WasX = ZFalse
ZOutTxt$ = MID$(STR$((ZWasB > ZWasA) * WasZ),2)
ZWasSL = LEN(ZOutTxt$)
ZOutTxt$ = SPACE$(-(ZWasSL<4) * (4-ZWasSL)) + ZOutTxt$
ZWasSL = LEN(CurPre$)
IF CurPre$ = "USERS" AND CurExt$ = "" THEN _
Conf$ = "MAIN" _
ELSE Conf$ = LEFT$(CurPre$,ZWasSL-1)
ZWasY$ = Conf$ + SPACE$(-(ZWasSL<8) * (8-ZWasSL))
IF WasX THEN _
WasX$ = ZEmphasizeOn$ : _
ZWasZ$ = ZEmphasizeOff$ _
ELSE WasX$ = "" : _
ZWasZ$ = ""
ZOutTxt$ = ZWasY$ + ": " + ZOutTxt$ + " new message(s): " + _
WasX$ + MID$(" None *Some*",-6 * WasX + 1,6) + " to you" + ZWasZ$
ZSubParm = 5
CALL TPut
IF SkipJoinUnjoin THEN _
CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) : _
GOTO 59853
SkipParms = SkipParms + 2 ' KG072101
ZTurboKey = -ZTurboKeyUser
CALL AskMore (",J)oin,U)njoin",ZTrue,ZFalse,WasX,ZFalse)
IF ZNo THEN _
GOTO 59854
WasX$ = LEFT$(ZUserIn$(1),1)
CALL AllCaps (WasX$)
IF WasX$ = "J" THEN _
ZHomeConf$ = Conf$ : _
GOTO 59854
IF WasX$ = "U" THEN _
IF InCur OR (OrigPre$ = CurPre$ AND OrigExt$ = CurExt$) THEN _
CALL QuickTPut1 ("Can't omit yourself from the board or conference you're in") _
ELSE LSET ZUserRecord$ = CHR$(0) + "deleted user" : _
ZUserFileIndex = HoldUserFileIndex : _
ZSubParm = 6 : _
CALL FileLock : _
PUT 5, HoldUserFileIndex : _
ZSubParm = 8 : _
CALL FileLock : _
CALL QuickTPut1 ("Omitted you from " + Conf$) ' KG073104
59853 IF ZActiveMessageFile$ = LogicalEOF$ THEN _ ' KG073104
GOTO 59854 ' KG073104
IF NOT ZRet THEN _ ' KG073104
GOTO 59852
IF ZActiveMessageFile$ = LogicalEOF$ THEN _ ' KG072901
GOTO 59854 ' KG072901
------------------------[ KG073103 ]-------------------------
Problem: When people hand edit the config def file, they can get a
value for color that generates an error and never lets the SysOp into
config.
Solution: Change CONFIG.BAS as follows:
22340 LOCATE 22,1
PRINT SPACE$(15) + _
TIME$ + _
" " + _
SPACE$(64);
LOCATE 22,35
COLOR 0,7
PRINT " Reading Data, Wait a sec !!! ";
COLOR FG,BG,BORDER ' KG073103
22342 RETURN ' KG073103
60010 '* HANDLE ERROR CONDITIONS *
IF ERR = 62 AND _
(ERL = 11600 OR _
ERL = 11620 OR _
ERL = 11640 OR _
ERL = 11660 OR _
ERL = 11680 OR _
ERL = 11700 OR _
ERL = 11705 OR _
ERL = 11706) THEN _
PRINT CONFIG.FILENAME$ + _
" from a version earlier than " + CONFIG.VERSION$ + " on default drive." : _
PRINT "Please delete and rerun CONFIG." : _
RESUME 60340
IF ERL = 15780 AND ERR = 5 AND _
INSTR(USER.INIT.COMMAND$,"S0=") = 0 THEN _
RESUME 16073
IF ERL = 22340 THEN _ ' KG073103
RESUME 22342 ' KG073103
IF ERL = 31000 AND ERR = 58 THEN _
KILL A$ : _
RESUME 31000
IF ERL = 31030 AND ERR = 58 THEN _
KILL A$ : _
RESUME 31030
IF ERL = 22120 AND ERR = 6 THEN _
RESUME 22100
IF ERL = 24750 AND ERR = 58 THEN _
KILL A$ : _
RESUME 24750
IF ERL = 31020 THEN _
PRINT "Unable to kill ";MAIN.MESSAGE.FILE$;". Error";STR$(ERR):_
RESUME 31035
IF ERL = 50490 AND ERR = 58 THEN _
RESUME 50500
IF ERL = 50540 AND ERR = 58 THEN _
RESUME 50550
IF ERL = 50490 OR ERL = 50540 THEN _
RESUME 15230
IF ERL = 60471 THEN _
IF ERR <> 76 THEN _
RESUME 60478 _
ELSE RESUME 60474
IF ERL = 60480 THEN _
PRINT "ERROR -";ERR;" UNABLE TO CREATE SUBDIRECTORY" : _
RESUME 60478
IF ERR = 61 THEN _
PRINT "ERROR - IBM DOS DISKETTE FULL " : _
RESUME 60340
IF ERR = 67 THEN _
PRINT "ERROR - IBM DOS DIRECTORY FULL" : _
RESUME 60340
IF ERR = 70 THEN _
PRINT "DISKETTE IN DRIVE IS WRITE PROTECTED" : _
RESUME 60340
IF ERR = 71 THEN _
PRINT "DRIVE DOOR OPEN OR MISSING DISKETTE" : _
RESUME 60340
IF ERR = 72 THEN _
PRINT "ERROR - UNFORMATTED IBM DOS DISKETTE IN DRIVE" : _
RESUME 60340
PRINT "+++ Error";ERR;" in line ";ERL "occurred at " TIME$ " on " DATE$
------------------------[ KG073102 ]-------------------------
Problem: When stack a "C" in a msg read command, interpretes
as "continuous" but also treats as if it were a string to search
for.
Solution: Change RBBS-PC.BAS as follows:
4371 IF MsgIndex <= NumMsgsSelected THEN _ ' KG022701
IF LEN(ZUserIn$(MsgIndex)) = 1 AND _ ' KG073102
INSTR("Cc",ZUserIn$(MsgIndex)) > 0 THEN _ ' KG022701
GOTO 4370 _
ELSE _
CALL CheckInt (ZUserIn$(MsgIndex)) : _ ' KG022701
IF ZErrCode <> 0 THEN _
ZWasEL = 4371 : _
GOTO 13000 _
ELSE CurMsg = ZTestedIntValue : _
ZAnsIndex = MsgIndex : _ ' KG022701
GOTO 4415
------------------------[ KG073101 ]-------------------------
Problem: SysOp can put in a user with a blank password so that
user can set password 1st time calls. Or might add this way to
a private subboard. However, users with blank passwords will be
not be displayed in the user list, not even to SysOp.
Solution: Change RBBS-PC.BAS as follows:
10097 IF WasI > HighestUserRecord OR ZRet THEN _
GOTO 10099
GET 5,WasI
WasX$ = MID$(ZUserRecord$,ZStartHash,ZLenHash)
IF ASC(WasX$)=0 OR LEFT$(WasX$,3)=" " THEN _ ' KG073101
GOTO 10098
IF INSTR(WasX$,ZWasZ$) > 0 OR ZSysopSecLevel <= CVI(MID$(ZUserRecord$,47,2)) THEN _
IF NOT ZSysop THEN _
GOTO 10098
CALL AskMore ("",ZTrue,ZTrue,WasXX,ZFalse)
IF ZNo OR ZSubParm = -1 THEN _
GOTO 10099
ZOutTxt$ = LEFT$(WasX$,36) + ZCityState$ + ZLastDateTimeOn$
GOSUB 12979
------------------------[ KG073001 ]-------------------------
Problem: When do an autologoff and have insufficent time to download,
then enter another download with autologoff, logged off immediately.
Solution: Cancel any autologoff when any file not downloaded because
of insufficent time. Change RBBSSUB5.BAS as follows:
20760 IF ZErrCode <> 0 THEN _
CALL QuickTPut1 ("Unable to access "+ZFileNameHold$) : _
CALL UpdtCalr ("Unable to access "+ZFileName$,2) : _
ZOK = ZFalse : _
ZErrCode = 0 : _
ZBytesInFile# = 0 : _
RETURN
ZBytesInFile# = LOF(2)
ZNumDnldBytes! = LOF(2)
ZOK = ZTrue
IF SizeOnly THEN _
SizeOnly = ZFalse : _
RETURN
ZBlocksInFile# = MaxBlock
IF ZBatchTransfer THEN _
Temp# = BatchBlocks# + ZBlocksInFile# : _
CALL CheckTimeRemain (MinsRemaining) : _
IF (NOT PersonalDnld) AND _
(INT(Temp# / 60) + 1 > MinsRemaining) THEN _
CALL QuickTPut1 ("Omitting " + ZFileNameHold$ + ". Insufficient time") : _
ZAutoLogoffReq = ZFalse : _ ' KG073001
RETURN _
ELSE BatchBlocks# = Temp# : _
BatchBytes# = BatchBytes# + ZBytesInFile# : _
CALL OpenWorkA (ZNodeWorkFile$) : _
CALL PrintWorkA (ZFileName$) : _
ZDownFiles = ZDownFiles + 1 : _
RETURN
ZDownFiles = 1
------------------------[ MB073001 ]-------------------------
Problem: On logon, if start name with leading spaces, will not
hide the password.
Solution: Change RBBSSUB2.BAS as follows:
1550 IF ZLogonActive THEN _
IF (ZWasY$ = " " OR ZWasY$ = ";") AND LEN(ZUserIn$) > 0 AND _ ' MB073001
RIGHT$(ZUserIn$,1) <> " " AND RIGHT$(ZUserIn$,1) <> ";" THEN _
Parm = Parm + 1 : _
ZLogonActive = (Parm < 3) : _
ZHidden = (Parm = 2) : _
CALL LPrnt(WasX$,0) : _
GOTO 1551
IF ZHidden AND (WasX$ <> " ") THEN _
WasX$ = "."
CALL LPrnt(WasX$,0)
------------------------[ KG072902 ]-------------------------
Problem: Prompt on number of seconds to delay before issuing a
modem command says can be 0 to 99 but edit only permits 1 to 99.
Solution: Change CONFIG.BAS as follows:
15250 CALL MMINTEGER ("# seconds to delay prior to issuing modem commands (1 to 99)?",1,99,MODEM.COMMAND.DELAY.TIME) ' KG072902
RETURN
------------------------[ KG072901 ]-------------------------
Problem: (Fix to a fix) Sometimes a conference is skipped in
conference V)iew when should not be.
Solution: Change RBBSSUB4.BAS as follows:
59852 IF NOT ZOK THEN _
GOTO 59854 _ ' KG072101
ELSE IF EOF(2) THEN _ ' KG072101
IF LogicalEOF$ = "" THEN _ ' KG072101
GOTO 59854 _ ' KG072101
ELSE CALL FindIt (ZConfMailList$) : _ ' KG072101
SkipParms = 0 : _ ' KG072901
GOTO 59852 ' KG072101
CALL ReadAny
ZActiveUserFile$ = ZOutTxt$
CALL ReadAny
IF ZErrCode > 0 THEN _
GOTO 59854
ZActiveMessageFile$ = ZOutTxt$ ' KG072901
CALL FindFile (ZActiveUserFile$,ZOK)
IF NOT ZOK THEN _
GOTO 59854
CALL OpenUser (HighestUserRecord)
FIELD 5, 128 AS ZUserRecord$
CALL FindFile (ZActiveMessageFile$,ZOK)
IF NOT ZOK THEN _
GOTO 59854
CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
0,0,HighestUserRecord,_
Found,HoldUserFileIndex,ZWasSL)
IF NOT Found THEN _
GOTO 59852
CALL OpenMsg
FIELD 1, 128 AS ZMsgRec$
GET 1,1
AnyMail = ZTrue
WasX = CVI(MID$(ZUserRecord$,57,2))
WasX = (WasX AND 512) > 0
CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
IF InCur THEN _
WasX = ZMailWaiting : _ ' KG030101
ZWasA = ZLastMsgRead _
ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
ZWasB = VAL(LEFT$(ZMsgRec$,8))
WasZ = (ZWasB - ZWasA)
IF WasZ < 0 THEN _
ZWasA = 0 : _
WasZ = ZWasB _
ELSE IF WasZ = 0 THEN _
WasX = ZFalse
ZOutTxt$ = MID$(STR$((ZWasB > ZWasA) * WasZ),2)
ZWasSL = LEN(ZOutTxt$)
ZOutTxt$ = SPACE$(-(ZWasSL<4) * (4-ZWasSL)) + ZOutTxt$
ZWasSL = LEN(CurPre$)
IF CurPre$ = "USERS" AND CurExt$ = "" THEN _
Conf$ = "MAIN" _
ELSE Conf$ = LEFT$(CurPre$,ZWasSL-1)
ZWasY$ = Conf$ + SPACE$(-(ZWasSL<8) * (8-ZWasSL))
IF WasX THEN _
WasX$ = ZEmphasizeOn$ : _
ZWasZ$ = ZEmphasizeOff$ _
ELSE WasX$ = "" : _
ZWasZ$ = ""
ZOutTxt$ = ZWasY$ + ": " + ZOutTxt$ + " new message(s): " + _
WasX$ + MID$(" None *Some*",-6 * WasX + 1,6) + " to you" + ZWasZ$
ZSubParm = 5
CALL TPut
IF SkipJoinUnjoin THEN _
CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) : _
GOTO 59853
SkipParms = SkipParms + 2 ' KG072101
ZTurboKey = -ZTurboKeyUser
CALL AskMore (",J)oin,U)njoin",ZTrue,ZFalse,WasX,ZFalse)
IF ZNo THEN _
GOTO 59854
WasX$ = LEFT$(ZUserIn$(1),1)
CALL AllCaps (WasX$)
IF WasX$ = "J" THEN _
ZHomeConf$ = Conf$ : _
GOTO 59854
IF WasX$ = "U" THEN _
IF InCur OR (OrigPre$ = CurPre$ AND OrigExt$ = CurExt$) THEN _
CALL QuickTPut1 ("Can't omit yourself from the board or conference you're in") _
ELSE LSET ZUserRecord$ = CHR$(0) + "deleted user" : _
ZUserFileIndex = HoldUserFileIndex : _
ZSubParm = 6 : _
CALL FileLock : _
PUT 5, HoldUserFileIndex : _
ZSubParm = 8 : _
CALL FileLock : _
CALL QuickTPut1 ("Omitted you from " + Conf$)
IF ZActiveMessageFile$ = LogicalEOF$ THEN _ ' KG072901
GOTO 59854 ' KG072901
------------------------[ KG072802 ]-------------------------
Problem: Possible to improperly read thru messages when
renumbering in CONFIG.
Solution: Change CONFIG.BAS as follows:
23610 I = LOC(1) + VAL(MID$(MESSAGE.RECORD$,117,4)) - 1 ' KG072802
RETURN
------------------------[ KG072801 ]-------------------------
Problem: When renumber messages using config.exe, it resets
last message read for all users to 0 rather than to the
new message number.
Solution: Change CONFIG.BAS as follows:
23750 REDIM MSG.XREF(MAXIMUM.NUMBER.OF.MSGS,2) ' KG072801
MSG.XREF.INDX = 0 ' dd062790
B1 = CALLS.TODATE! ' dd062790
CALL GETINIT ("Renumber starting with OLD message # (<" + _
STR$(CALLS.TODATE! + 1) + _
")",24,1,B1,RE,CR)
IF CR THEN _
RETURN
23900 A$ = "Reset last message read for all users" ' dd062790
GOSUB 22580
23905 GOSUB 24020
GOSUB 24025
A! = HIGHEST.USER.RECORD
XX$ = "Resetting Last Msg Read by User. Processing Record #" ' dd062790
GOSUB 50345
FOR J = 1 TO A!
GET 1,J
LOCATE 24,X
PRINT J;
HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
LSET COMP.USER$ = HASH.VALUE$
IF ASC(HASH.VALUE$) = 0 OR _
COMP.USER$ = NEW.USER$ OR _
COMP.USER$ = EMPTY.USER$ THEN _
GOTO 23955
FORMER.LAST.MSG = CVI(MID$(USER.OPTIONS$,3,2)) ' dd062790
MSG.XREF.INDX = 1 ' KG072801
23906 IF MSG.XREF.INDX > MAXIMUM.NUMBER.OF.MSGS THEN _ ' KG072801
GOTO 23907 ' KG072801
IF FORMER.LAST.MSG = MSG.XREF(MSG.XREF.INDX,1) THEN _ ' dd062790
NEW.LAST.MSG = MSG.XREF(MSG.XREF.INDX,2) : _ ' dd062790
GOTO 23907 ' KG072801
IF FORMER.LAST.MSG < MSG.XREF(MSG.XREF.INDX,1) THEN _ ' dd062790
NEW.LAST.MSG = MSG.XREF(MSG.XREF.INDX - 1,2) : _ ' dd062790
GOTO 23907 ' KG072801
MSG.XREF.INDX = MSG.XREF.INDX + 1 ' KG072801
GOTO 23906 ' KG072801
23907 IF FORMER.LAST.MSG = 0 THEN NEW.LAST.MSG = 0 ' KG072801
MID$(USER.OPTIONS$,3,2) = MKI$(NEW.LAST.MSG) ' dd062790
PUT 1,J
24010 LOCATE 24,15
PRINT "Msg #" ; MID$(MESSAGE.RECORD$,1,5);
CURRENT.MSG.NUMBER = VAL(MID$(MESSAGE.RECORD$,2,4)) ' dd062790
IF CURRENT.MSG.NUMBER < RE THEN _ ' dd062790
PRINT " read"; : _
MSG.XREF.INDX = MSG.XREF.INDX + 1 : _ ' dd062790
MSG.XREF(MSG.XREF.INDX, 1) = CURRENT.MSG.NUMBER : _ ' dd062790
MSG.XREF(MSG.XREF.INDX, 2) = CURRENT.MSG.NUMBER : _ ' dd062790
RETURN
Y$ = MID$(MESSAGE.RECORD$,1,1)
MID$(MESSAGE.RECORD$,1,5) = SPACE$(5)
NE = NE + 1
MID$(MESSAGE.RECORD$,1,5) = STR$(NE)
MID$(MESSAGE.RECORD$,1,1) = Y$
PRINT " renumbered as Msg #" + MID$(MESSAGE.RECORD$,1,5)
PUT 1,I
MSG.XREF.INDX = MSG.XREF.INDX + 1 ' dd062790
MSG.XREF(MSG.XREF.INDX, 1) = CURRENT.MSG.NUMBER ' dd062790
MSG.XREF(MSG.XREF.INDX, 2) = NE ' dd062790
RETURN
------------------------[ KG072702 ]-------------------------
Problem: When stack uploads and give an extended desciption,
all uploads thereafter are ignored.
Solution: Change RBBSSUB5.BAS as follows:
20430 ZAnsIndex = ZLastIndex
GOSUB 20470
ZLastIndex = ZLastIndex + (WasX > 0)
LastUpld = ZLastIndex ' KG072702
20432 FOR ZAnsIndex = FirstUpld TO LastUpld ' KG072702
GOSUB 20470
GOSUB 20435
FirstUpld = FirstUpld + 1 ' KG072702
IF ZFileSysParm > 1 THEN _
ZAnsIndex = LastUpld + 1 ' KG072702
NEXT
ZCmdTransfer$ = ""
RETURN
20705 ZMaxMsgLines = ZMaxMsgLinesDef
ZRightMargin = WasLL
GOSUB 20702 ' KG072702
GOTO 20432 ' KG072702
------------------------[ KG072701 ]-------------------------
Strings shortened to reduce size of EXE and free up string space.
Change RBBSSUB3.BAS as follows:
58150 ' $SUBTITLE: 'CountNewFiles - sub to count how many files new'
' $PAGE
'
' NAME -- CountNewFiles
'
' INPUTS -- PARAMETER MEANING
' LastOn$ Date of last logon
' UPLDS$ Latest uploads
'
' OUTPUTS -- NumNewFiles How many after last logon
' RptPrefix$ Set to "At least " if
' above is a minimum
'
' PURPOSE -- Checks how many files in UPLDS$ were uploaded on or
' after date of last logon that the user can download
'
SUB CountNewFiles (LastOn$,Upld(2),NumUserFiles,RptPrefix$) STATIC
BaseDate = 372 * (VAL(MID$(LastOn$,7,2)) - 80) + _
31 * (VAL(MID$(LastOn$,1,2))) + _
VAL(MID$(LastOn$,4,2))
NumNewFiles = 1
NumUserFiles = 0
WHILE (BaseDate <= Upld(NumNewFiles,1) AND _
Upld(NumNewFiles,1) > 0 AND _
NumNewFiles < UBOUND(Upld,1))
IF ZUserSecLevel => Upld(NumNewFiles,2) THEN _
NumUserFiles = NumUserFiles + 1
NumNewFiles = NumNewFiles + 1
WEND
IF Upld(NumNewFiles,1) < 1 THEN _
NumNewFiles = NumNewFiles - 1
IF BaseDate <= Upld(NumNewFiles,1) THEN _
RptPrefix$ = "At least" _ ' KG072701
ELSE RptPrefix$ = ""
END SUB
(line 20705)
SUB UpdtUpload (ZCategoryName$(1),ZCategoryCode$(1), LinesInDesc) STATIC
IF ZGetExtDesc THEN _
GOTO 20723
GOSUB 20734
CALL TimeRemain (MinsRemaining)
IF ZPrivateDoor THEN _
WasX! = ZUpldTimeFactor! * ZWasQ! _
ELSE WasX! = ZUpldTimeFactor! * (ZSecsUsedSession! - ZWasQ!)
CALL BreakFileName (ZFileName$,Pre$,Body$,Ext$,ZFalse)
WasX$ = ZDiskForDos$ + "T" + Ext$ + ".BAT"
CALL FindIt (WasX$)
IF NOT ZOK THEN _
GOTO 20708
CALL QuickTPut1 ("Testing if file OK...") : _ ' KG072601
CALL ReadDir (2,1)
IF EOF(2) THEN _
WasX$ = ZOutTxt$ : _
ZGSRAra$(1) = ZFileName$ : _
ZGSRAra$(2) = ZNodeWorkFile$ _
ELSE WasX$ = WasX$ + " " + _
ZFileName$ + " " + ZNodeWorkFile$
CALL ShellExit (WasX$)
CALL FindIt (ZNodeWorkFile$)
IF ZOK THEN _
IF LOF(2) > 2 THEN _
ZBytesInFile# = 0.0 : _
WasX$ = "Deleting BAD upload " + ZFileNameHold$ : _
CALL QuickTPut1 (WasX$) : _
CALL UpdtCalr (WasX$,2) : _
CALL KillWork (ZFileName$) : _
EXIT SUB
20712 ZOK = 0
CALL CheckNovell (ZOK)
IF ZOK <> -1 THEN _
CALL SetSharedAttr (ZFileName$, ZOK) : _
IF ZOK <> 0 THEN _
CALL PScrn ("Error setting to shared") ' KG072701
Desc$ = ZUserIn$
IF NOT ZLimitSearchToFMS THEN _
IF ZFMSDirectory$ <> ZUpldDir$ THEN _
IF LEFT$(ZUserIn$,1) = "/" THEN _
CALL UpdtCalr (ZUserIn$,2) : _
GOTO 20726_
ELSE GOTO 20717
20726 ZWasDF$ = " >> uploaded << "
ZUplds = ZUplds + 1
ZGlobalUplds = ZGlobalUplds + 1
ZULBytes! = ZULBytes! + ZBytesInFile#
ZGlobalULBytes! = ZGlobalULBytes! + ZBytesInFile#
CALL Muzak (7)
CALL TimeRemain (MinsRemaining)
ZTimeCredits! = ZTimeCredits! + WasX!
ZSecsPerSession! = ZSecsPerSession! + WasX!
IF ZPrivateDoor THEN _
WasX! = (WasX! - ZWasQ!) / 60 _
ELSE WasX! = (WasX! - ZSecsUsedSession! + ZWasQ!)/60.0
WasX$ = STR$(FIX(WasX!*10.0))
WasX$ = LEFT$(WasX$,LEN(WasX$)-1) + "." + RIGHT$(WasX$,1)
IF WasX! > 1 THEN _
CALL QuickTPut1 ("Increased session time by"+WasX$+" minutes") ' KG072701
CALL QuickTPut1 ("Thanks for the upload!")
ZGetExtDesc = ZFalse
EXIT SUB
Change RBBSSUB5.BAS as follows:
(line 63320)
SUB ShellExit (ShellTem$) STATIC
CALL DelayTime (8 + ZBPS)
IF NOT ZLocalUser THEN _
IF ZFossil THEN _
CALL FOSExit(ZComPort) _
ELSE CLOSE 3 : _
OUT ZModemCntlReg,INP(ZModemCntlReg) OR 1
CLOSE 2
CALL MetaGSR (ShellTem$,ZFalse)
SHELL ShellTem$
IF ZFossil THEN _
IF NOT ZLocalUser THEN _
CALL FOSinit(ZComPort,Result) : _
IF Result = -1 THEN _
CALL PScrn("ERROR INIT FOSSIL AFT EXTERNAL") : _ ' KG072701
SYSTEM
CALL DelayTime (2)
CALL RestoreCom
END SUB
------------------------[ KG072606 ]-------------------------
Problem: When joining a subboard, RBBS was taking the reference
date for new files, new bulletins, and news, from the main board
rather than the last time the subboard had been entered.
Solution: Change RBBS-PC.BAS as follows:
5348 GOSUB 12987
GOSUB 12990
IF SubBoard THEN _
ZHasDoored = ZFalse : _
ZActiveFMSDir$ = "" : _
ZTimeLoggedOn$ = TIME$ : _ ' KG070601
BoardCheckDate$ = ZLastDateTimeOn$ : _ ' KG072606
RETURN 108
GOSUB 827
IF UpdateDate THEN _
BoardCheckDate$ = ZLastDateTimeOn$ : _
ZTimeLoggedOn$ = TIME$ : _ ' KG070601
LSET ZLastDateTimeOn$ = ZCurDate$ + _
" " + _
ZTimeLoggedOn$ : _
GOSUB 9440 : _
GOSUB 12991
IF PrevUSL <> ZUserSecLevel THEN _
CALL SetPrompt
GOSUB 1241
RETURN 852
------------------------[ KG072605 ]-------------------------
Problem: "R)eview" for block edit made "L)ist". Shorter string,
more consistent with L)ist used elsewhere in RBBS.
Change RBBS-PC.BAS as follows:
2530 ZOutTxt$ = "Delete lines " + STR$(Mark1) + "-" + _ ' DA071702
MID$(STR$(Mark2),2) + " (Y,[N],L)ist)" ' KG072605
GOSUB 12930
Temp$ = ZUserIn$(ZAnsIndex) ' DA071702
CALL AllCaps(Temp$) ' DA071702
IF Temp$ = "L" THEN GOTO 2522 ' KG072605
IF NOT ZYes THEN _
ZOutTxt$ = "NOT Deleted" : _
GOSUB 12979 : _
GOTO 2555
------------------------[ KG072604 ]-------------------------
Problem: When have no doors installed at all, get msg "All
doors locked!", which implies there are doors, just are locked.
Solution: Change RBBS-PC.BAS as follows:
10970 IF NOT ZDoorsAvail OR _
(ZRequiredRings = 0 AND NOT ZNoDoorProtect) THEN _
CALL QuickTPut1 ("No doors available") : _ ' KG072604
RETURN
IF ZTimeLock AND 1 AND NOT ZHasDoored THEN _
CALL TimeLock : _
IF NOT ZOK THEN _
RETURN
------------------------[ KG072603 ]-------------------------
Problem: Sysop can put commands to reset user's preferences
anywhere, so msg to go to utilties to reset can be misleading.
Solution: Change RBBS-PC.BAS as follows:
5400 CALL SkipLine(2)
CALL QuickTPut1 ("Your PROFILE") ' KG072603
------------------------[ KG072602 ]-------------------------
Problem: When don't have a MODEMS.SET, and reset modem commands
to the default, get 0 for modem delay time and others.
Solution: Change CONFIG.BAS as follows:
15790 FIRMWARE.INITIALIZE.COMMAND$ = "AT&C1&D3B1E0V1M0S0=0&T5"
FIRMWARE.CLEAR.COMMAND$ = "AT&F"
FIRMWARE.WRITE.COMMAND$ = "&W"
A$(1) = MODEM.ANSWER.COMMAND$
A$(2) = MODEM.COUNT.RINGS.COMMAND$
A$(3) = MODEM.GO.OFFHOOK.COMMAND$
A$(4) = MODEM.INIT.COMMAND$
A$(5) = MODEM.RESET.COMMAND$
A$(6) = FIRMWARE.INITIALIZE.COMMAND$
A$(7) = FIRMWARE.CLEAR.COMMAND$
A$(8) = FIRMWARE.WRITE.COMMAND$
A$(9) = "NO" ' KG072602
A$(10) = "3" ' KG072602
A$(11) = "2" ' KG072602
A$(12) = "0" ' KG072602
CALL SELMODEM
USER.ANSWER.COMMAND$ = A$(1)
USER.COUNT.RINGS.COMMAND$ = A$(2)
USER.GO.OFFHOOK.COMMAND$ = A$(3)
USER.INIT.COMMAND$ = A$(4)
USER.RESET.COMMAND$ = A$(5)
USER.INITIALIZE.COMMAND$ = A$(6)
USER.FIRMWARE.CLEAR.CMND$ = A$(7)
USER.FIRMWARE.WRITE.CMND$ = A$(8)
RTS$ = A$(9)
MODEM.INIT.WAIT.TIME = VAL(A$(10))
MODEM.COMMAND.DELAY.TIME = VAL(A$(11))
COMMANDS.BETWEEN.RINGS = VAL(A$(12))
RETURN
------------------------[ KG072601 ]-------------------------
Problem: When using routine in Basic to do uppercase, converting
not just a-z to A-Z. E.g., "{" became "[". Causing problems with
modem strings, especially in CONFIG.
Solution: Change RBBSSUB3.BAS as follows:
(line 58050)
SUB AllCaps (ConvertField$) STATIC
IF ZTurboRBBS THEN _
CALL RBBSULC (ConvertField$) : _
EXIT SUB
FOR WasZ = 1 TO LEN(ConvertField$)
WasX = ASC(MID$(ConvertField$,WasZ,1)) ' KG072601
IF WasX > 96 THEN IF WasX < 123 THEN _ ' KG072601
MID$(ConvertField$,WasZ,1) = CHR$(WasX AND 223) ' KG072601
NEXT
END SUB
Change CNFG-SUB.BAS as follows:
61212 ANS$ = "YES"
EXIT SUB
END SUB
' $SUBTITLE: 'ALLCAPS - convert a sting into all capital letters'
' $PAGE
'
' SUBROUTINE NAME -- ALLCAPS
'
' INPUT PARAMETERS -- PARAMETER MENANING
' STRNG$ STRING CONTAINING THE QUESTION
'
' OUTPUT PARAMETERS -- STRNG$ CAPITALIZED STRING
'
' SUBROUTINE PURPOSE -- TO CAPITALIZE A STRING
'
SUB ALLCAPS (STRNG$) STATIC
FOR WasZ = 1 TO LEN(STRNG$) ' KG072601
WasX = ASC(MID$(STRNG$,WasZ,1)) ' KG072601
IF WasX > 96 THEN IF WasX < 123 THEN _ ' KG072601
MID$(STRNG$,WasZ,1) = CHR$(WasX AND 223) ' KG072601
NEXT
END SUB
' $SUBTITLE: 'ASKUPOS - find the unique user field for USERS'
' $PAGE
'
' SUBROUTINE NAME -- ASKUPOS
'
' INPUT PARAMETERS -- PARAMETER MENANING
' HDR$ HEADER
' BEGIN.COL BEGINNING COLUMN OF FIELD
' FIELD.LEN LENGTH OF FIELD IN USER'S RECORD
' PRMPT$ PROMPT TO GIVE FOR FIELD
'
' OUTPUT PARAMETERS -- ABOVE INPUTS UPDATED WITH USER'S RESPONSES
'
' SUBROUTINE PURPOSE -- TO ASK THE SYSOP WHAT UNIQUE FIELD IN THE USERS
' RECORD IS TO BE ASKED FOR AT LOGON
'
SUB ASKUPOS (HDR$,BEGIN.COL,FIELD.LEN,PRMPT$) STATIC
CLS
LOCATE 3,20
PRINT HDR$;
------------------------[ KG072102 ]-------------------------
Problem: When have an empty file LIDXT.DEF, getting untrapped
error.
Solution: Change RBBSSUB5.BAS as follows:
63522 RecFoundAt = 0
IF High < 1 THEN _ ' KG072102
EXIT SUB ' KG072102
WasX$ = SPACE$ (NumChars)
Done = ZFalse
WHILE NOT Done
WasI = INT(((High + Low) / 2) + .5)
GET 2, WasI
LSET WasX$ = MID$(SearchRec$, StartPos, NumChars)
IF WasX$ = SearchFor$ THEN _
RecFound$ = SearchRec$: _
RecFoundAt = WasI : _
Done = ZTrue _
ELSE IF (High - Low) < 2 THEN _
Done = ZTrue _
ELSE IF WasX$ < SearchFor$ THEN _
Low = WasI _
ELSE IF WasX$ > SearchFor$ THEN _
High = WasI
WEND
END SUB
------------------------[ KG072101 ]-------------------------
Problem: Conference v)iew is frustrating to use when have
many conferences because always starts at the top, forcing
caller to go thru same list every time to get to later conferences.
Solution: Keep track of last conference viewed and start listing
after it. Will do a complete listing every time of all the files
if elect to have more, no matter where start initially.
Change RBBSSUB4.BAS as follows:
(line 59850)
SUB ConfMail (MailCheckConfirm) STATIC
SkipJoinUnjoin = ZNonStop
IF ZStartHash = 1 AND ZUserFileIndex > 0 THEN _
CALL FindIt (ZConfMailList$) _
ELSE ZOK = ZFalse
IF NOT ZOK THEN _
EXIT SUB
IF PrevMailList$ <> ZConfMailList$ THEN _ ' KG072101
SkipParms = 0 ' KG072101
PrevMailList$ = ZConfMailList$ ' KG072101
IF MailCheckConfirm THEN _
ZOutTxt$ = "Check conferences for mail ([Y],N)" : _
ZTurboKey = -ZTurboKeyUser : _
CALL PopCmdStack : _
IF ZNo OR ZSubParm < 0 THEN _
EXIT SUB
CALL BreakFileName (ZActiveUserFile$,WasX$,NowInPre$,NowInExt$,ZFalse)
CALL BreakFileName (ZOrigUserFile$,WasX$,OrigPre$,OrigExt$,ZFalse)
CALL SkipLine (1)
CALL QuickTPut1 ("Checking Message Bases...") ' DA071701
AnyMail = ZFalse
ZStopInterrupts = ZFalse
WasA1$ = ZActiveUserFile$
MsgFileSave$ = ZActiveMessageFile$
TempIndivValue$ = ""
UserFileIndexSave = ZUserFileIndex
UserRecordHold$ = ZUserRecord$
ZOK = ZTrue
CALL ReadParms (ZWorkAra$(),1,SkipParms) ' KG072101
IF SkipParms = 0 THEN _ ' KG072101
LogicalEOF$ = "" _ ' KG072101
ELSE LogicalEOF$ = ZWorkAra$(1) ' KG072101
59852 IF NOT ZOK THEN _
GOTO 59854 _ ' KG072101
ELSE IF EOF(2) THEN _ ' KG072101
IF LogicalEOF$ = "" THEN _ ' KG072101
GOTO 59854 _ ' KG072101
ELSE CALL FindIt (ZConfMailList$) : _ ' KG072101
GOTO 59852 ' KG072101
CALL ReadAny
ZActiveUserFile$ = ZOutTxt$
CALL ReadAny
IF ZErrCode > 0 THEN _
GOTO 59854
ZActiveMessageFile$ = ZOutTxt$
IF ZActiveMessageFile$ = LogicalEOF$ THEN _ ' KG072101
GOTO 59854 ' KG072101
CALL FindFile (ZActiveUserFile$,ZOK)
IF NOT ZOK THEN _
GOTO 59854
CALL OpenUser (HighestUserRecord)
FIELD 5, 128 AS ZUserRecord$
CALL FindFile (ZActiveMessageFile$,ZOK)
IF NOT ZOK THEN _
GOTO 59854
CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
0,0,HighestUserRecord,_
Found,HoldUserFileIndex,ZWasSL)
IF NOT Found THEN _
GOTO 59852
CALL OpenMsg
FIELD 1, 128 AS ZMsgRec$
GET 1,1
AnyMail = ZTrue
WasX = CVI(MID$(ZUserRecord$,57,2))
WasX = (WasX AND 512) > 0
CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
IF InCur THEN _
WasX = ZMailWaiting : _ ' KG030101
ZWasA = ZLastMsgRead _
ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
ZWasB = VAL(LEFT$(ZMsgRec$,8))
WasZ = (ZWasB - ZWasA)
IF WasZ < 0 THEN _
ZWasA = 0 : _
WasZ = ZWasB _
ELSE IF WasZ = 0 THEN _
WasX = ZFalse
ZOutTxt$ = MID$(STR$((ZWasB > ZWasA) * WasZ),2)
ZWasSL = LEN(ZOutTxt$)
ZOutTxt$ = SPACE$(-(ZWasSL<4) * (4-ZWasSL)) + ZOutTxt$
ZWasSL = LEN(CurPre$)
IF CurPre$ = "USERS" AND CurExt$ = "" THEN _
Conf$ = "MAIN" _
ELSE Conf$ = LEFT$(CurPre$,ZWasSL-1)
ZWasY$ = Conf$ + SPACE$(-(ZWasSL<8) * (8-ZWasSL))
IF WasX THEN _
WasX$ = ZEmphasizeOn$ : _
ZWasZ$ = ZEmphasizeOff$ _
ELSE WasX$ = "" : _
ZWasZ$ = ""
ZOutTxt$ = ZWasY$ + ": " + ZOutTxt$ + " new message(s): " + _
WasX$ + MID$(" None *Some*",-6 * WasX + 1,6) + " to you" + ZWasZ$
ZSubParm = 5
CALL TPut
IF SkipJoinUnjoin THEN _
CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) : _
GOTO 59853
SkipParms = SkipParms + 2 ' KG072101
ZTurboKey = -ZTurboKeyUser
CALL AskMore (",J)oin,U)njoin",ZTrue,ZFalse,WasX,ZFalse)
IF ZNo THEN _
GOTO 59854
WasX$ = LEFT$(ZUserIn$(1),1)
CALL AllCaps (WasX$)
IF WasX$ = "J" THEN _
ZHomeConf$ = Conf$ : _
GOTO 59854
IF WasX$ = "U" THEN _
IF InCur OR (OrigPre$ = CurPre$ AND OrigExt$ = CurExt$) THEN _
CALL QuickTPut1 ("Can't omit yourself from the board or conference you're in") _
ELSE LSET ZUserRecord$ = CHR$(0) + "deleted user" : _
ZUserFileIndex = HoldUserFileIndex : _
ZSubParm = 6 : _
CALL FileLock : _
PUT 5, HoldUserFileIndex : _
ZSubParm = 8 : _
CALL FileLock : _
CALL QuickTPut1 ("Omitted you from " + Conf$)
59854 ZActiveUserFile$ = WasA1$
CALL OpenUser (HighestUserRecord)
FIELD 5, 128 AS ZUserRecord$
IF (NOT ZRet) AND NOT AnyMail THEN _
CALL QuickTPut1 ("You have not joined any conferences")
ZUserFileIndex = UserFileIndexSave
LSET ZUserRecord$ = UserRecordHold$
ZActiveMessageFile$ = MsgFileSave$
CALL OpenMsg
FIELD 1, 128 AS ZMsgRec$
GET 1,1
ZNonStop = (ZPageLength > 0)
WasX$ = ZUserIn$(ZAnsIndex+1) ' KG071202
CALL AllCaps (WasX$) ' KG071202
ZAnsIndex = ZAnsIndex - (WasX$ = "C") ' KG071202
SkipParms = -(NOT EOF(2))*SkipParms ' KG072101
END SUB
------------------------[ DA071803 ]-------------------------
Problem: When using non-date-sorted FMS directory, still says every
1000 files into a search that files are searched thru a certain date.
Solution: just report number of files searched.
Change RBBSSUB3.BAS as follows:
58178 IF ZLinesPrinted <= MaxPrint AND (FMSCheckPoint MOD 1000 <> 0) THEN _ ' DA071803
GOTO 58168
CALL CheckCarrier
IF ZSubParm = -1 THEN _
GOTO 58183
CALL TimeRemain (MinsRemaining)
IF MinsRemaining <= 0 THEN _
ZSubParm = -1 : _
GOTO 58183
IF ZNonStop THEN _
GOTO 58168
IF ZLinesPrinted <= MaxPrint THEN _
IF ZDateOrderedFMS THEN _ ' DA071803
CALL QuickTPut1 (ZEmphasizeOff$ + _ ' DA071803
"Files checked thru " + MID$(PartToPrint$,24,8)) _ ' DA071803
ELSE _ ' DA071803
CALL QuickTPut1 (ZEmphasizeOff$ + STR$(FMSCheckPoint) + _ ' DA071803
" files checked") ' DA071803
(line 58180)
.
.
.
IF ZNonStop THEN IF UpldIndex > 999 THEN _
IF (SearchDate$ = "" OR NOT ZExpertUser) THEN _
ZOutTxt$ = STR$(UpldIndex) + _
" lines left to search. Really go non-stop? (Y/[N])" : _
ZNoAdvance = ZTrue : _
ZTurboKey = -ZTurboKeyUser : _
ZSubParm = 1 : _
CALL TGet : _
CALL WipeLine (79) : _
ZNonStop = ZYes ' DA071803
GOTO 58168
------------------------[ DA071801 ]-------------------------
Problem: code not using built in function. Makes shorter and more
consistent, as well as easier to change.
Change RBBSSUB4.BAS as follows:
58900 ZOutTxt$ = ZDirPrompt$
ZMacroMin = 2
CALL PopCmdStack
IF ZWasQ = 0 OR ZSubParm = -1 THEN _
EXIT SUB
CALL AllCaps (ZUserIn$(ZAnsIndex))
IF ZUserIn$(ZAnsIndex) = "Q" THEN _
ZWasQ = 0 : _
EXIT SUB
ZWasA = INSTR("E+.E-.E.L.H.?.",ZUserIn$(ZAnsIndex)+".")
IF ZWasA = 0 THEN _
EXIT SUB
IF ZWasA > 8 THEN _
IF ZAnsIndex < ZLastIndex THEN _
GOTO 58900 _
ELSE GOTO 58902
IF ZWasA = 7 THEN _
ZExtendedOff = NOT ZExtendedOff _
ELSE ZExtendedOff = (ZWasA > 3)
CALL QuickTPut1 ("Extended directory display "+FNOffOn$(NOT ZExtendedOff)) ' DA071801
GOTO 58900
------------------------[ DA071702 ]-------------------------
Problem: in block delete, text about to be deleted was displayed
automatically. Change to give option to review first. Useful when
very short block already see or very large blocks, where want to
not see.
Change RBBS-PC.BAS as follows:
2520 ZOutTxt$ = "Up to and including Line # (ENTER =" + STR$(Mark1) + ")"
GOSUB 3302
IF ZWasQ = 0 THEN _
Mark2 = Mark1 _
ELSE Mark2 = ZTestedIntValue
CALL SkipLine(1)
IF Mark1 > Mark2 THEN _
ZOutTxt$ = "Beginning exceeds end. Block NOT deleted" : _ ' DA071701
GOSUB 12979 : _
GOTO 2555
IF Mark1 <= MsgLockLines THEN _
ZOutTxt$ = "You can NOT delete lines 1 -" + STR$(MsgLockLines) + "!" : _
GOSUB 12979 : _
GOTO 2555
GOTO 2530 ' DA071702
2530 ZOutTxt$ = "Delete lines " + STR$(Mark1) + "-" + _ ' DA071702
MID$(STR$(Mark2),2) + " (Y,[N],R)eview)" ' DA071702
GOSUB 12930
Temp$ = ZUserIn$(ZAnsIndex) ' DA071702
CALL AllCaps(Temp$) ' DA071702
IF Temp$ = "R" THEN GOTO 2522 ' DA071702
IF NOT ZYes THEN _
ZOutTxt$ = "NOT Deleted" : _
GOSUB 12979 : _
GOTO 2555
------------------------[ DA071701 ]-------------------------
Text made shorter, clearer, and more consistent, especially in use of
capitalization. Sometimes only cosmetic change to Basic code. Numerous
changes over different modules. Not listed here.
------------------------[ ML071502 ]-------------------------
Problem: When viewing separate commends file, sometimes does not
display lines right because inherits a search string from prior
processing.
Change RBBSSUB5.BAS as follows:
20122 CALL OpenWork (2,ZFileName$)
IF ZErrCode = 53 THEN _
ZOutTxt$ = "Missing File " + ZFileName$ : _
CALL UpdtCalr (ZOutTxt$,2) : _
ZOutTxt$ = ZOutTxt$ + _
". Please tell SYSOP" : _
GOSUB 21650 : _
RETURN
ZJumpSupported = ZTrue
ZJumpLast$ = ""
LastOK = ZFalse
ZJumpSearching = ZFalse ' ML071502
------------------------[ ML071501 ]-------------------------
Problem: Fixes a fix, so that L)ist in extended description entry
works right.
Change RBBS-PC.BAS as follows:
3020 IF ZGetExtDesc THEN WasL = 1 ' ML071501
FOR WasX = WasL TO ZLinesInMsg ' ML071501
CALL AskMore ("",ZTrue,ZTrue,WasXX,ZFalse)
IF ZNo OR ZRet THEN _
WasX = ZLinesInMsg + 1 _
ELSE ZOutTxt$ = RIGHT$(STR$(WasX),2) + _
": " + _
ZOutTxt$(WasX) : _
GOSUB 12979
NEXT
RETURN
------------------------[ ML062202 ]-------------------------
Problem: When search in msg header for any part of "(R)" and reply to
a reply, can get "(R)(R)" in subject.
Solution: Change RBBS-PC.BAS as follows:
4621 IF ZUserSecLevel < ZOptSec(5) THEN _
ZViolation$ = "MORE RE" : _
GOSUB 1380 : _
ZReply = ZFalse : _
GOTO 4629
IF LEFT$(OrigSubject$,3) <> "(R)" THEN _ ' ML062202
OrigSubject$ = "(R)" + _
LEFT$(OrigSubject$,22)
------------------------[ ML062201 ]-------------------------
Problem: Variable UserSecLevelSave was being tested for whether person
doing editing of user record was SysOp, but variable was set only when
A)dd a user and not ever time in user maintenance.
Change RBBS-PC.BAS as follows:
11000 WasTU = ZUserFileIndex
CALL DefaultU
UserRecordHold$ = ZUserRecord$
RegDateHold$ = ZRegDate$
UserSecLevelSave = ZUserSecLevel ' ML062201
12300 WasA1$ = ""
Attempts = 0 ' ML062201
FirstNameSave$ = ZFirstName$
LastNameSave$ = ZLastName$
ActiveUserNameSave$ = ZActiveUserName$
CityStateSave$ = ZWasCI$
HashValueSave$ = HashValue$
IndivValueSave$ = ZIndivValue$ ' RC050901
GOSUB 12500
GOSUB 12840
GOSUB 12850
GOSUB 12598
IF ZUserFileIndex = 0 THEN _
GOSUB 12984 : _
GOTO 12330
IF Found THEN _
WasD$ = "User already exists" : _
GOSUB 1315 : _
GOSUB 12984 : _
GOTO 12330
------------------------[ ML061905 ]-------------------------
Problem: When using msg editor to enter an extended description,
RBBS displays erroneous To: and From:.
Solution: Change RBBS-PC.BAS as follows:
3010 ZStopInterrupts = ZFalse
CALL SkipLine (1)
IF (ZWasQ = 1 OR MsgFwd) AND NOT ZGetExtDesc THEN _ ' ML061905
WasL = 1 : _
ZOutTxt$ = ZFG3$ + "To: " + _
MsgTo$ + _
ZFG4$ + " Re: " + _
Subject$ + ZEmphasizeOff$ : _
GOSUB 12979 : _
CALL QuickTPut (MID$(" ",1,-4 * (NOT ZRemoteEcho)),0) : _
GOSUB 3200
------------------------[ ML061904 ]-------------------------
Problem: People often only decide whether should be private after
they compose it, but are asked before composing about status.
Solution: Move question on protection after the save.
Make the following changes to RBBS-PC.BAS.
2020 CALL MessageTo (HighestUserRecord,MsgTo$,MsgFrom$,RcvrRecNum,Found)
IF MsgTo$ = "" THEN _
RETURN
IF ZSysopComment OR SysopMsg THEN _ ' ML061904
GOTO 2100 ' ML061904
IF ZReply OR MsgFwd THEN _
Found = ZTrue : _
CALL Trim (MsgTo$): _
GOTO 2035 _
ELSE Subject$ = ""
GOSUB 2065
2035 IF QuotedReply THEN _ ' ML061904
RETURN
GOTO 2100
3405 SaveReplyStatus = ZReply ' ML061904
ZReply = ZTrue ' ML061904
IF SysopMsg THEN _ ' ML061904
MsgPswd$ = "^READ^" _ ' ML061904
ELSE CALL MsgProt (MsgTo$,Found,MsgPswd$) ' ML061904
SysopMsg = ZFalse ' ML061904
ZReply = SaveReplyStatus ' ML061904
GOSUB 4910 ' ML061904
MsgRecSave$ = ZMsgRec$
MsgCorrected = ZFalse
GOSUB 23100
ZOutTxt$ = "Adding new msg #" + _
STR$(HighMsgNumber + 1)
IF NOT ZLocalUser THEN _
CALL UpdtCalr (ZOutTxt$,1)
GOSUB 12978
ZWasSL = 0
ZWasN$ = ""
ZLastIndex = 0
IF LowMsgNumber = 0 THEN _
LowMsgNumber = 1 : _
HighMsgNumber = 1 _
ELSE HighMsgNumber = HighMsgNumber + 1
------------------------[ KG071903 ]-------------------------
Problem: Can never select "H" for a protocol choice. Also, ? in
response to protocol choice ignored instead of giving help.
Solution: Change RBBSSUB3.BAS as follows:
21610 CALL AllCaps (ZWasZ$)
ZFF = INSTR(ZDefaultXfer$,ZWasZ$) ' KG071903
IF ZFF > 0 THEN _ ' KG071903
GOTO 21612 ' KG071903
IF INSTR("H?",ZWasZ$) > 0 THEN _ ' KG071903
GOTO 21602 ' KG071903
GOTO 21600 ' KG071903
------------------------[ KG071902 ]-------------------------
String shortened to reduce size of EXE.
Change RBBSSUB4.BAS as follows:
(line 62620)
SUB Transfer STATIC
IF ZPrivateDoor THEN _
CALL PrivDoorRtn : _
EXIT SUB
IF ZTransferFunction = 1 THEN _
ZUserIn$ = ZDownTemplate$ : _
ZWasZ$ = "send " _
ELSE IF ZTransferFunction = 2 THEN _
ZUserIn$ = ZUpTemplate$ : _
ZWasZ$ = "receive "
CALL MetaGSR (ZUserIn$,ZFalse)
CALL QuickTPut1 ("Protocol : "+ZProtoPrompt$)
CALL QuickTPut ("Ready to " + ZWasZ$ + " ",0)
IF ZBatchTransfer THEN _
CALL QuickTPut1 ("(BATCH)") : _
CALL OpenWork (2,ZNodeWorkFile$) : _
WHILE NOT EOF(2) : _
CALL ReadAny : _
CALL BreakFileName (ZOutTxt$,ZWasZ$,ZWasY$,WasX$,ZTrue) : _
CALL QuickTPut1 (" "+ZWasY$+WasX$) : _
WEND _
ELSE CALL QuickTPut1 (ZFileNameHold$)
IF ZAutoLogoffReq THEN _
CALL QuickTPut1 ("Automatic logoff, if download OK") ' KG071902
CALL PrivDoorRtn
END SUB
------------------------[ KG071901 ]-------------------------
Problem: When try to download a file that violates the security
in FILESEC, RBBS says a file with no name is not found and asks for
correct name, rather than just skipping.
Solution: Change RBBSSUB3.BAS as follows:
35000 ' $SUBTITLE: 'FlushKeys - Completely flush all user input'
' $PAGE
'
' NAME -- FlushKeys
'
SUB FlushKeys STATIC
CALL FlushCom (ZWasY$) ' KG071901
ZLastIndex = 0
REDIM ZUserIn$(ZMsgDim)
END SUB
------------------------[ KG071301 ]-------------------------
Mixed bad of changes to reduce size of EXE. Mainly shortening
strings, but also eliminating operations. Question eliminated on
logon whether terminal supports only upper case, since virtually
all do. Now have to go into utilities to change to toggle into
upper case.
Change RBBS-PC.BAS as follows:
31 ZSnoop = ZTrue
CALL PScrn ("Configuration "+ZConfigFileName$+" missing/improper format") : _ ' KG071301
GOTO 204
345 LOCATE 24,1
CALL AMorPM
ZUserLogonTime! = TIMER
ZTimeLoggedOn$ = TIME$
ZLinesPrinted = 0
ZExpertUserDef = ZExpertUser
ZExpertUser = ZFalse
CALL SetExpert
ZOutTxt$ = ""
IF NodesInSystem > 1 THEN _
ZOutTxt$ = " - NODE " + ZNodeID$
IF ZReliableMode THEN _
ZOutTxt$ = ZOutTxt$ + " (Reliable)" ' KG071301
CALL QuickTPut1 ("WELCOME TO " + ZRBBSName$ + ZOutTxt$)
ZTestParity = ZTrue
ZStopInterrupts = ZTrue
ZFileName$ = ZPreLog$
CALL FlushCom (WasX$)
ZCommPortStack$ = ""
760 GOSUB 755
CALL AllCaps (ZWasZ$)
LSET ZPswd$ = ZWasZ$
CALL QuickTPut1 ("Please REMEMBER your password")
ZUserTextColor = 37
ZTempSecLevel = ZUserSecLevel
CALL Protocol
ZUserXferDefault$ = "N"
ZProtoPrompt$ = "None"
IF ZNewUserSetsDefaults THEN _ ' KG071301
ZBypassTimeCheck = ZTrue : _
GOSUB 43000 : _
ZBypassTimeCheck = ZFalse : _
CALL Graphic (ZUserGraphicDefault$,ZFileName$) : _
GOSUB 42805 : _
GOSUB 42700 _
ELSE ZUpperCase = ZFalse : _
ZHiLiteOff = ZTrue : _
CALL SetGraphic (0,ZUserGraphicDefault$) : _
ZNulls = ZFalse
ZPageLength = ZPageLengthDef
GOSUB 12900
GOSUB 5135
CALL DefaultU
2600 ZOutTxt$ = "Edit"
GOSUB 3300
IF ZTestedIntValue <= MsgLockLines THEN _
ZOutTxt$ = "Not permitted to change 1st" + _ ' KG071301
STR$(MsgLockLines) + " line(s)" : _
GOSUB 12979 : _
GOTO 2300
CALL EditALine (ZTestedIntValue)
IF ZSubParm < 0 THEN _
GOTO 202
GOTO 2300
4710 ZOutTxt$ = "Page " + _
ZSysopFirstName$ + _
" (Y/[N])"
CALL SkipLine (1)
GOSUB 12999
IF NOT ZYes THEN _
RETURN
PageCount = 0
ZOutTxt$ = "Paging " + _
ZSysopFirstName$ ' KG071301
GOSUB 12978
PageTimeStart! = TIMER
13600 CLS
LOCATE ,,0
CALL PScrn (ZWasDF$ + " file missing/invalid. Run CONFIG") ' KG071301
CALL DelayTime (3)
GOTO 203
23100 GET 1,ZNextMsgRec
IF MID$(ZMsgRec$,61,1) = ":" THEN _
CALL CheckInt (MID$(ZMsgRec$,117,4)) : _
IF ZErrCode = 0 AND (ZTestedIntValue > 1) AND (ZTestedIntValue < 100) THEN _
WasY = ZTestedIntValue : _
CALL CheckInt (MID$(ZMsgRec$,2,4)) : _
IF ZErrCode = 0 AND ZTestedIntValue > HighMsgNumber THEN _
HighMsgNumber = ZTestedIntValue : _
ZNextMsgRec = ZNextMsgRec + WasY : _
CALL QuickTPut1 ("Fixing Msg Header") : _ ' KG071301
MsgCorrected = ZTrue : _
GOTO 23100
RETURN
Omit line 42950.
Change RBBSSUB2.BAS as follows:
(line 97)
SUB CopyRight STATIC
ZWasA = (ZRecycleToDos OR ZDebug OR ZNodeRecIndex > 2)
IF ZWasA THEN _
EXIT SUB
WIDTH 80
REDIM ZOutTxt$(11)
ZOutTxt$(1) = "If you use RBBS-PC CPC17.3A, please consider contributing to"
ZOutTxt$(2) = ""
ZOutTxt$(3) = " Capital PC Software Exchange"
ZOutTxt$(4) = " Post Office Box 6128"
ZOutTxt$(5) = " Silver Spring, Maryland 20906"
ZOutTxt$(6) = ""
ZOutTxt$(7) = "You are free to copy/share RBBS-PC CPC17.3A provided" ' KG071301
ZOutTxt$(08)= " 1. This program is distributed unmodified"
ZOutTxt$(09)= " 2. No fee or consideration is charged for RBBS-PC itself"
ZOutTxt$(10)= " 3. This notice is not bypassed or removed."
.
.
.
4777 ZWasCM = 0
CALL CheckTime(TimeChatStarted!,Elapsed!, 2)
ZSecsPerSession! = ZSecsPerSession! + Elapsed!
IF NOT ZLocalUser THEN _
ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect
CALL QuickTPut(" Chat over. BBS resuming",2) ' KG071301
END SUB
(line 5507)
SUB Baud450 STATIC
IF ZBPS <> -1 THEN _
CALL QuickTPut1 ("Sorry, only 300 baud can change speed") : _
EXIT SUB
IF ZFossil THEN _
CALL QuickTPut1 ("Sorry, no 450 baud under FOSSIL") : _ ' KG071301
EXIT SUB
ZOutTxt$ = "Change to 450 baud (Y,[N])"
ZTurboKey = -ZTurboKeyUser
ZSubParm = 1
CALL TGet
IF ZSubParm = -1 OR NOT ZYes THEN _
EXIT SUB
------------------------[ KG071202 ]-------------------------
Problem: Stacked command at main menu to "v c" interpreted as
View continuously and then leave comment. Caused by change
in 070901. Very tricky to inteprete stacked commands.
Solution: Change RBBSSUB4.BAS as follows:
59854 ZActiveUserFile$ = WasA1$
CALL OpenUser (HighestUserRecord)
FIELD 5, 128 AS ZUserRecord$
IF (NOT ZRet) AND NOT AnyMail THEN _
CALL QuickTPut1 ("You have not joined any conferences")
ZUserFileIndex = UserFileIndexSave
LSET ZUserRecord$ = UserRecordHold$
ZActiveMessageFile$ = MsgFileSave$
CALL OpenMsg
FIELD 1, 128 AS ZMsgRec$
GET 1,1
ZNonStop = (ZPageLength > 0)
WasX$ = ZUserIn$(ZAnsIndex+1) ' KG071202
CALL AllCaps (WasX$) ' KG071202
ZAnsIndex = ZAnsIndex - (WasX$ = "C") ' KG071202
END SUB
------------------------[ KG071201 ]-------------------------
Problem: When execute a macro within a macro, not looking in the
drive/path specified in config when the macro name has an extension
but no drive/path.
Solution: Change RBBSSUB2.BAS as follows:
(line 1325)
SUB Macro (Strng$,MacroFound) STATIC
MacroFound = ZFalse
FilName$ = Strng$ ' KG071201
CALL BreakFileName (FilName$,ZWasDF$,Prefix$,WasX$,ZFalse) ' KG071201
IF WasX$ = "" THEN _ ' KG071201
FilName$ = Strng$ + ZMacroExtension$ ' KG071201
IF ZWasDF$ = "" THEN _ ' KG071201
FilName$ = ZMacroDrvPath$ + FilName$ ' KG071201
CALL BadFile (FilName$,ZWasA)
IF ZWasA > 1 THEN _
EXIT SUB
CALL GRAPHICX (ZUserGraphicDefault$,FilName$,6)
IF NOT ZOK THEN _
EXIT SUB
CALL ReadDir (6,1)
IF ZErrCode > 0 THEN _
EXIT SUB
CALL CheckInt (ZOutTxt$)
IF ZErrCode > 0 OR ZUserSecLevel < ZTestedIntValue THEN _
EXIT SUB
ZWasA = INSTR(ZOutTxt$,"/")
IF ZWasA > 0 THEN _ ' Check macro contraint
WasX$ = RIGHT$(ZOutTxt$,LEN(ZOutTxt$)-ZWasA) : _
IF RIGHT$(WasX$,1) = "/" THEN _
IF ZLastCommand$ <> LEFT$(WasX$,LEN(WasX$)-1) THEN _
EXIT SUB _
ELSE GOTO 1327 _
ELSE IF LEFT$(ZLastCommand$,LEN(WasX$)) <> WasX$ THEN _
EXIT SUB
------------------------[ DA071101 ]-------------------------
Problem: When conference is full, rejoin main, and try to enter
a message, told it is full too.
Solution: Change RBBS-PC.BAS as follows:
2000 QuotedReply = ZFalse
MsgFrom$ = ZActiveUserName$
SysopMsg = ZFalse ' MB051601
GOSUB 1893 ' DA071101
------------------------[ KG071101 ]-------------------------
Problem: When people are non-subscribers they should never get
a message warning them about the expiration of there subscribers.
But they will, even when their subscription level is below the
subscriber level.
Solution: Change RBBS-PC.BAS as follows:
832 IF ZRestrictByDate AND ZDaysInRegPeriod > 0 THEN _
IF ZRegDaysRemaining <= ZDaysToWarn AND _
ZRegDaysRemaining > 0 AND ZUserSecLevel > ZExpiredSec THEN _ ' KG071101
CALL QuickTPut1 ("Registration EXPIRES in" + _
STR$(ZRegDaysRemaining) + " days!") : _
CALL BufFile(ZHelpPath$+"RGXPIRE"+ZHelpExtension$,WasX) : _
IF NOT ZOk THEN CALL DelayTime (5)
IF (NOT ZReqQuesAnswered) AND _
ZReqQues$ <> "" THEN _
ZFileName$ = ZReqQues$ : _
GOSUB 11520 : _
IF ZOK THEN _
ZReqQuesAnswered = ZTrue ' KG052701
------------------------[ KG071001 ]-------------------------
Problem: When an FMS entry began with "=", it was never being
counted as a possible new file on logon, even though it could be listed
as a new file when the caller had sufficient security to view.
Solution: Change RBBSSUB3.BAS as follows:
58140 ' $SUBTITLE: 'LoadNew - subroutine to get latest uploads'
' $PAGE
'
' NAME -- LoadNew
'
' INPUTS -- PARAMETER MEANING
' ZUpldDir$ LIST OF FILES UPLOADED
'
' OUTPUTS -- ZOutTxt$ LATEST UPLOADS
'
' PURPOSE -- Loads table of most recent number of uploads by date
'
SUB LoadNew (Ara(2)) STATIC
IF ZFMSDirectory$ = "" THEN _
EXIT SUB
ZPrevBase$ = ""
FirstWarning = ZTrue ' KG041103
IF PrevLoadNew$ = ZFMSDirectory$ THEN _
Ara(1,1) = 0 : _
EXIT SUB
PrevLoadNew$ = ZFMSDirectory$
CALL OpenFMS (LastRec)
FIELD 2, 23 AS PreDate$, _
2 AS WasMM$, _
1 AS Fill1$, _
2 AS WasDD$, _
1 AS Fill2$, _
2 AS Year$, _
(2 + ZMaxDescLen) AS Desc$, _ ' KG071001
3 AS Category$, _
2 AS Fill4$
MaxRecs = UBOUND(Ara,1)
IF MaxRecs < 1 THEN _
MaxRecs = 1 _
ELSE IF MaxRecs > 23 THEN _
MaxRecs = 23
WasL = 0
WasK = LastRec
WHILE WasK > 0 AND WasL < MaxRecs
GET #2,WasK
IF INSTR("\ ",LEFT$(PreDate$,1)) > 0 THEN _ ' KG071001
GOTO 58142
IF (ZCanDnldFromUp OR Category$ <> ZDefaultCatCode$) THEN _
IF VAL(Year$) > 79 THEN _ ' KG041103
WasL = WasL + 1 : _ ' KG041103
Ara(WasL,1) = 372! * (VAL(Year$) - 80!) + 31! * VAL(WasMM$) + VAL(WasDD$) _' KK030901
ELSE IF FirstWarning THEN _ ' KG041103
FirstWarning = ZFalse : _ ' KG041103
ZWasZ$ = "Invalid FMS format " + ZFMSDirectory$ : _ ' KG041103
CALL PScrn (ZWasZ$) : _ ' KG041103
CALL UpdtCalr (ZWasZ$,2) ' KG041103
IF NOT ZCanDnldFromUp THEN _
WasX = ZMinSecToView _
ELSE IF Category$ = "***" THEN _
WasX = ZSysopSecLevel _
ELSE IF Category$ = ZDefaultCatCode$ THEN _
WasX = ZMinSecToView _
ELSE IF LEFT$(PreDate$,1) = "=" THEN _ ' KG071001
CALL CheckInt (Desc$) : _ ' KG071001
WasX = ZTestedIntValue _ ' KG071001
ELSE WasX = ZOptSec(19) ' KG071001
Ara(WasL,2) = WasX
------------------------[ KG070901 ]-------------------------
Problem: RBBS is supposed to support stacked command everywhere.
Cases not working include "q u c", "5 M F". Many commands inside
sysop function 5 did not support stacking.
Change RBBS-PC.BAS as follows:
11001 ZStopInterrupts = ZTrue
WasI = 1
ScanUsers = ZFalse
IF EditFromRead = 1 THEN GOTO 11341 ' KG070901
ZOutTxt$ = "A)dd, L)st, P)rt, M)od, S)can users"
GOSUB 12930 ' KG070901
11003 IF ZWasQ = 0 THEN _
IF EditFromRead > 0 THEN _
GOTO 11325 _
ELSE _
ZUserFileIndex = WasTU : _
GOTO 20093
WasQQ = 0
ZWasZ$ = LEFT$(ZUserIn$(ZAnsIndex),1) ' KG070901
CALL AllCaps (ZWasZ$)
IF ZWasZ$ = "A" THEN _
GOTO 12300 _
ELSE IF ZWasZ$ = "M" THEN _
ZStopInterrupts = ZTrue _
ELSE IF ZWasZ$ = "P" THEN _
WasQQ = ZTrue _
ELSE IF ZWasZ$ = "S" THEN _
ScanUsers = ZTrue : _
ZStopInterrupts = ZTrue _
ELSE IF ZWasZ$ <> "L" THEN _
GOTO 11001
11005 CALL OpenUser (HighestUserRecord)
GOSUB 9450
WasZ = 1
IF ScanUsers THEN _
ZOutTxt$ = "Scan for N)ame, P)wd, C)" + ZUserLocation$ + ", L)evel" + _
LEFT$(", H)ash id",-9*(ZStartHash > 1 AND ZLenHash > 0)) : _
GOSUB 12930 : _ ' KG070901
ZOutTxt$ = "" : _
ScanFunction$ = LEFT$(ZUserIn$(1),1) : _
CALL AllCaps (ScanFunction$) : _
ZCR = 0 : _
GOSUB 12979 : _
GOSUB 12966 : _
GOTO 12962
11110 ZOutTxt$ = "D)el,F)ind,M)enu,N)ewPW,P)rnt,R)eset gr,Q)uit,S)ecLvl,U)ser#,X)fer"
IF ZRestrictByDate THEN _
ZOutTxt$ = ZOutTxt$ + _
",$)RegDate"
GOSUB 12930 ' KG070901
IF NOT ScanUsers AND ZWasQ = 0 THEN _
GOTO 11310
11115 ZWasZ$ = LEFT$(ZUserIn$(ZAnsIndex),1) ' KG070901
CALL AllCaps (ZWasZ$)
WasX = INSTR("DNPQFSMR$UX",ZWasZ$)
IF ZWasZ$ = "" AND ScanUsers THEN _
GOTO 12965
ON WasX GOTO 11130,11160,11220,11320,11340,11390,11330,11400,11450,11127,11490
GOTO 11110
11127 ZOutTxt$ = "What record #"
GOSUB 12932 ' KG070901
GOTO 11125
11340 ZOutTxt$ = ZPromptHash$ + _
" to find"
CALL SkipLine (1)
ZParseOff = ZTrue ' KG070901
GOSUB 12932 ' KG070901
IF ZWasQ = 0 THEN _
GOTO 11340
TempHashValue$ = ZUserIn$
11395 ZOutTxt$ = "New sec level"
GOSUB 12932 ' KG070901
ZWasZ$ = ZUserIn$(ZAnsIndex) ' KG070901
WasOF = VAL(ZWasZ$)
IF WasOF > ZUserSecLevel THEN _
WasOF = ZUserSecLevel
RETURN
11450 ZOutTxt$ = "Enter new registration date (MM-DD-YY)"
GOSUB 12932 ' KG070901
IF ZWasQ = 0 THEN _
GOTO 11015
11455 WorkDate$ = ZUserIn$(ZAnsIndex) ' KG070901
IF LEN(WorkDate$) < 8 THEN _
GOTO 11450
GOSUB 11470
IF NOT ZOK THEN _
GOTO 11450
LSET ZUserOption$ = LEFT$(ZUserOption$,10) + _
ZRegDate$ + _
MID$(ZUserOption$,13)
GOSUB 11480
ZRegDate$ = RegDateHold$
GOTO 11290
Change RBBSSUB2.BAS as follows:
1651 IF ZAnsIndex < ZLastIndex THEN _
ZAnsIndex = ZAnsIndex + 1 : _
ZUserIn$ = ZUserIn$(ZAnsIndex) : _
IF MID$(ZLastCommand$,2,1) <> " " AND (NOT ZStackC) AND ZAnsIndex > 1 AND INSTR("Cc",ZUserIn$) > 0 AND LEN(ZUserIn$) = 1 THEN _ ' KG070901
GOTO 1651 _
ELSE ZSubParm = 3 : _
CALL TGet : _
GOTO 1652
ZLastIndex = 0
ZAnsIndex = 1
ZSubParm = 1
ZSearchingAll = ZFalse
CALL TGet
ZLastIndex = ZWasQ
------------------------[ KG070601 ]-------------------------
Problem: When log on before midnight, but join a subboard after
midnight, the date last logged on in the main users file would have
the later date sometimes, such as when rejoined main. This caused
people not to get a new allotment of time when they called back the
next day. Also, the time recorded in the user's file for a conference
was always the orginal time logged on rather than the actual time the
conference was entered.
Add the following variables to RBBS-VAR.BAS: ZOrigTimeLoggedOn$,
ZOrigDateTimeOn$
Change RBBS-PC.BAS as follows:
815 ZDnlds = CVI(ZUserDnlds$)
ZUplds = CVI(ZUserUplds$)
IF ZEnforceRatios THEN _
ZDLToday! = CVS(ZTodayDl$) : _
ZBytesToday! = CVS(ZTodayBytes$) : _
ZDLBytes! = CVS(ZDlBytes$) : _
ZULBytes! = CVS(ZULBytes$)
IF ZCurDate$ <> LEFT$(ZLastDateTimeOnSave$,8) THEN _
ZDLToday! = 0 : _
ZBytesToday! = 0
IF NOT GlobalsSet THEN _
GlobalsSet = ZTrue : _
ZGlobalDnlds = ZDnlds : _
ZGlobalUplds = ZUplds : _
ZGlobalDLToday! = ZDLToday! : _
ZGlobalBytesToday! = ZBytesToday! : _
ZGlobalDLBytes! = ZDLBytes! : _
ZGlobalULBytes! = ZULBytes!
'IF ZRatioRestrict# > 0 AND ZEnforceRatios THEN _
' IF ZByteMethod = 0 AND ZUplds < ZInitialCredit# THEN _
' ZUplds = ZInitialCredit# _
' ELSE IF ZByteMethod = 1 AND ZULBytes! < ZInitialCredit# THEN _
' ZULBytes! = ZInitialCredit#
GOSUB 827
LSET ZUserOption$ = MKI$(ZTimesLoggedOn) + _
MID$(ZUserOption$,3)
LSET ZLastDateTimeOn$ = ZCurDate$ + _
" " + _
ZTimeLoggedOn$
MID$(ZUserRecord$,ZStartHash,ZLenHash) = HashValue$
IF ZStartIndiv > 0 THEN _
MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$ ' RC050901
LSET ZUserName$ = ZOrigUserName$
IF (NOT ZExitToDoors) AND NOT (ZOrigMsgFile$ = ZActiveMessageFile$ AND SubBoard) THEN _
CALL AutoPage
IF NOT SubBoard THEN _
ZOrigUserFileIndex = ZUserFileIndex
IF NOT ZConfMode THEN _ ' KG070601
IF ZOrigDateTimeOn$ = "" THEN _ ' KG070601
ZOrigDateTimeOn$ = ZLastDateTimeOn$ : _ ' KG070601
ZOrigTimeLoggedOn$ = ZTimeLoggedOn$ _ ' KG070601
ELSE ZLastDateTimeOn$ = ZOrigDateTimeOn$ : ' KG070601
ZTimeLoggedOn$ = ZOrigTimeLoggedOn$ ' KG070601
GOSUB 9440
GOSUB 12991
CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)
IF TurboLogon THEN _
GOTO 819
IF SkipWelcomeScreen AND _
(ZUserSecLevel >= ZAllowCallerTurbo) THEN _
GOTO 816
IF NOT SameUser THEN _
ZStopInterrupts = NOT ZWelcomeInterruptable : _
ZBypassTimeCheck = ZTrue : _
ZFileName$ = ZWelcomeFile$ : _
ZDisplayAsUnit = ZTrue : _
GOSUB 1790 : _
ZDisplayAsUnit = ZFalse
ZBypassTimeCheck = ZFalse
ZStopInterrupts = ZTrue
5348 GOSUB 12987
GOSUB 12990
IF SubBoard THEN _
ZHasDoored = ZFalse : _
ZActiveFMSDir$ = "" : _
ZTimeLoggedOn$ = TIME$ : _ ' KG070601
RETURN 108
GOSUB 827
IF UpdateDate THEN _
BoardCheckDate$ = ZLastDateTimeOn$ : _
ZTimeLoggedOn$ = TIME$ : _ ' KG070601
LSET ZLastDateTimeOn$ = ZCurDate$ + _
" " + _
ZTimeLoggedOn$ : _
GOSUB 9440 : _
GOSUB 12991
IF PrevUSL <> ZUserSecLevel THEN _
CALL SetPrompt
GOSUB 1241
RETURN 852
Change RBBSSUB2.BAS as follows:
10602 ZSubParm = 6
ZWasY$ = ZLastDateTimeOn$ ' KG070601
CALL FileLock
CALL OpenUser (HighestUserRecord)
FIELD 5,31 AS ZUserName$, _
15 AS ZPswd$, _
2 AS ZSecLevel$, _
14 AS ZUserOption$, _
24 AS ZCityState$, _
3 AS MachineType$, _
4 AS ZTodayDl$, _
4 AS ZTodayBytes$, _
4 AS ZDlBytes$, _
4 AS ZULBytes$, _
14 AS ZLastDateTimeOn$, _
3 AS ZListNewDate$, _
2 AS ZUserDnlds$, _
2 AS ZUserUplds$, _
2 AS ZElapsedTime$
10604 GET 5,ZUserFileIndex
LSET ZLastDateTimeOn$ = ZWasY$ ' KG070601
IF UpdateDefaults THEN _
CALL DefaultU
IF ZListDir THEN _
LSET ZListNewDate$ = CHR$(VAL(MID$(ZCurDate$,7,2))) + _
CHR$(VAL(MID$(ZCurDate$,1,2))) + _
CHR$(VAL(MID$(ZCurDate$,4,2)))
10605 LSET ZUserDnlds$ = MKI$(ZDnlds)
LSET ZUserUplds$ = MKI$(ZUplds)
IF ZEnforceRatios THEN _
LSET ZTodayDl$ = MKS$(ZDLToday!) : _
LSET ZTodayBytes$ = MKS$(ZBytesToday!) : _
LSET ZDlBytes$ = MKS$(ZDLBytes!) : _
LSET ZULBytes$ = MKS$(ZULBytes!)
CALL CheckTime (ZUserLogonTime!, ZSecsUsedSession!, 2)
IF (NOT ZExitToDoors) AND LoggingOff THEN _
TempElapsed! = ZElapsedTime + _
(ZSecsUsedSession! - ZTimeCredits!) / 60 : _
ZTimeCredits! = 0 _
ELSE TempElapsed! = ZElapsedTime
IF TempElapsed! < -32767 THEN _
TempElapsed! = -32767 _
ELSE IF TempElapsed! > 32767 THEN _
TempElapsed! = 32767
LSET ZElapsedTime$ = MKI$(TempElapsed!)
IF ZAdjustedSecurity THEN _
LSET ZSecLevel$ = MKI$(ZUserSecLevel)
PUT 5,ZUserFileIndex
ZSubParm = 8
CALL FileLock
IF ZActiveUserFile$ <> ZOrigUserFile$ AND LoggingOff THEN _
ZActiveUserFile$ = ZOrigUserFile$ : _
ZUserFileIndex = ZOrigUserFileIndex : _
UpdateDefaults = ZFalse : _
LSET ZLastDateTimeOn$ = ZOrigDateTimeOn$ : _ ' KG070601
GOTO 10602
Change RBBSSUB3.BAS as follows:
43070 ZActiveMessageFile$ = ZOrigMsgFile$
ZSubParm = 3
CALL FileLock
CALL OpenMsg
FIELD 1, 128 AS ZMsgRec$
GET 1,ZNodeRecIndex
IF ZGlobalSysop THEN _
MID$(ZMsgRec$,1,30) = "SYSOP" + SPACE$(25)
MID$(ZMsgRec$,40,2) = STR$(ZExitToDoors)
MID$(ZMsgRec$,42,2) = STR$(ZEightBit)
MID$(ZMsgRec$,44,2) = STR$(ZBPS)
MID$(ZMsgRec$,46,2) = STR$(ZUpperCase)
MID$(ZMsgRec$,48,5) = MKS$(ZNumDnldBytes!) + MID$(STR$(-ZBatchTransfer),2) ' KG022101
MID$(ZMsgRec$,53,2) = STR$(ZWasGR)
MID$(ZMsgRec$,55,2) = STR$(ZSysop)
MID$(ZMsgRec$,65,3) = CHR$(VAL(LEFT$(ZTimeLoggedOn$,2))) + _
CHR$(VAL(MID$(ZTimeLoggedOn$,4,2))) + _
CHR$(VAL(MID$(ZTimeLoggedOn$,7,2)))
MID$(ZMsgRec$,72,2) = STR$(ZPrivateDoor)
MID$(ZMsgRec$,74,1) = MID$(STR$(ZTransferFunction),2,1)
MID$(ZMsgRec$,75,1) = ZWasFT$
MID$(ZMsgRec$,113,2) = MKI$(CINT(ZTimeCredits!)/60)
MID$(ZMsgRec$,79,8) = LEFT$(ZDooredTo$+" ",8)
MID$(ZMsgRec$,91,2) = STR$(ZReliableMode)
CALL BreakFileName (ZCurPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZFalse)
MID$(ZMsgRec$,93,8) = ZUserIn$ + SPACE$(8 - LEN(ZUserIn$))
IF ZLocalUser THEN _
ZWasZ$ = ZCarriageReturn$ + ZCarriageReturn$ _ ' KG030601
ELSE ZWasZ$ = " 0" ' KG030601
MID$(ZMsgRec$,101,2) = ZWasZ$ ' KG030601
MID$(ZMsgRec$,103,2) = STR$(ZLocalUserMode) ' KG030601
ZConfName$ = LEFT$(ZConfName$,INSTR(ZConfName$ + " "," ") - 1)
MID$(ZMsgRec$,105,8) = ZConfName$ + SPACE$(8 - LEN(ZConfName$))
MID$(ZMsgRec$,115,1) = MID$(STR$(ZAutoLogoffReq),2,1)
MID$(ZMsgRec$,117,2) = STR$(ZMenuIndex)
MID$(ZMsgRec$,119,2) = LEFT$(DATE$,2)
MID$(ZMsgRec$,121,2) = MID$(DATE$,4,2)
MID$(ZMsgRec$,123,2) = RIGHT$(DATE$,2)
MID$(ZMsgRec$,125,2) = LEFT$(TIME$,2)
MID$(ZMsgRec$,127,2) = MID$(TIME$,4,2)
' *** Save additional parameters for door restoral
CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
CALL PrintWorkA (STR$(ZLimitMinsPerSession))
CALL PrintWorkA (ZWasNG$) ' KG052701
CALL PrintWorkA (ZIndivValue$) ' NC050901
CALL PrintWorkA (ZOrigDateTimeOn$) ' KG070601
CALL PrintWorkA (ZOrigTimeLoggedOn$) ' KG070601
CLOSE 2
44003 ZUserLogonTime! = VAL(HourLoggedOn$) * 3600! + _ ' KK030901
VAL(MinLoggedOn$) * 60! + _ ' KK030901
VAL(SecLoggedOn$)
HourLoggedOn$ = ""
MinLoggedOn$ = ""
SecLoggedOn$ = ""
IF ZMinsPerSession < 1 THEN _
ZMinsPerSession = 3
IF NOT ZEightBit THEN _
OUT ZLineCntlReg,&H1A
IF LEFT$(ZMsgRec$,7) = "SYSOP " THEN _
ZFirstName$ = ZSysopPswd1$ : _
ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ _
ELSE ZFirstNameEnd = INSTR(ZMsgRec$," ") : _
ZLastNameEnd = INSTR(ZFirstNameEnd + 1,ZMsgRec$ + " "," ") : _
ZFirstName$ = LEFT$(ZMsgRec$,ZFirstNameEnd-1) : _
ZLastName$ = MID$(ZMsgRec$,ZFirstNameEnd + 1,ZLastNameEnd - (ZFirstNameEnd + 1)) : _
ZActiveUserName$ = MID$(ZFirstName$ + " " + ZLastName$,1,31)
ZWasZ$ = ZFirstName$
CALL OpenWork (2,ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
CALL ReadDir (2,1)
ZLimitMinsPerSession = VAL (ZOutTxt$)
CALL ReadDir (2,1) ' KG052701
ZWasNG$ = ZOutTxt$ ' KG052701
CALL ReadDir (2,1) ' RC050901
ZIndivValue$ = ZOutTxt$ ' RC050901
CALL ReadDir (2,1) ' KG070601
ZOrigDateTimeOn$ = ZOutTxt$ ' KG070601
CALL ReadDir (2,1) ' KG070601
ZOrigTimeLoggedOn$ = ZOutTxt$ ' KG070601
CLOSE 2
END SUB
------------------------[ KG062303 ]-------------------------
Problem: The page header in conference mode is saying conference
is private based on whether there is a user file. This is a holdover
from earlier version. Conferences with user files can be public.
Also, header should use name of conference rather than DOS name of
message file.
Solution: Omit whether public/private. Change CONFIG.BAS as follows:
24970 LOCATE 2,1
PRINT SPACE$(10)
LOCATE 2,10 ' KG062303
COLOR 31,0,0
PRINT "(Conference Maintenance Mode for " + _ ' KG062303
ZConfName$ + _ ' KG062303
")"; ' KG062303
RETURN
'
' * COMMON SUBROUTINE TO DISPLAY ACTIVITY WHEN PACKING/PURGING FILES
'
Change CNFG-SUB.BAS as follows:
24970 LOCATE 2,1
PRINT SPACE$(10)
LOCATE 2,10 ' KG062303
PRINT "(Conference Maintenance Mode for " + _ ' KG062303
ZConfName$ + _ ' KG062303
")";
RETURN
'
' * COMMON SUBROUTINE TO READ THE MESSAGES FILE'S CHECKPOINT RECORD
'
------------------------[ KG062302 ]-------------------------
Problem: When in conference mode, can be unclear what user/message
file currently working on.
Solution: Add the name of the conference to the text for the
user and message file names.
Add the following variables to CNFG-VAR.BAS: ZConfName$ and MAINMSG$
Change CONFIG.BAS as follows:
25050 CALL ASKRO ("Enter the name of the conference (7 characters or less) ",24,HJ$)
IF LEN(HJ$) < 1 OR LEN(HJ$) > 7 THEN _
GOTO 25040
CALL ALLCAPS (HJ$)
ZConfName$ = HJ$ ' KG062302
CP$ = HJ$
Change CNFG-SUB.BAS as follows:
12470 DISPLAYED.PAGE.NUMBER = 9
GOSUB 30040
' MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
MAX.ALLOWED.MSGS.FRM.DEF = MAXIMUM.NUMBER.OF.MSGS
GOSUB 24800
LOCATE 3,1
PRINT "161. Maximum number of concurrent RBBS-PC's -------" + STR$(MAXIMUM.NUMBER.OF.NODES)
MT$ = "single RBBS-PC copy "
IF MAXIMUM.NUMBER.OF.NODES <> 1 THEN _
MT$ = "concurrent RBBS-PC's" : _
SUBROUTINE.PARAMETER = 2 : _
IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 7 THEN _
SUBROUTINE.PARAMETER = 1 : _
CALL NETTYPE : _
ELSE CALL NETTYPE
IF NETWORK.TYPE = 6 THEN _
MT$ = "NETBIOS "
IF NETWORK.TYPE = 7 THEN _
MT$ = "DoubleDOS "
PRINT "162. Environment running " + MT$ + " ------ " + NETWORK.TYPE$
PRINT "163. RBBS-PC 'recycle' method when users log off --- " + RECYCLE.TO.DOS$
FILE$ = MAIN.MESSAGE.FILE$
GOSUB 30180
MAX.MSG.FILE.SIZE.FRM.DEF! = UG
IF CONFERENCE.MODE <> 1 THEN _ ' KG062302
X$ = "MAIN" _ ' KG062302
ELSE X$ = ZConfName$ ' KG062302
PRINT "164. Number of records in " ;X$;" User File ";STRING$(15-LEN(X$),"-");STR$(MAX.USR.FILE.SIZE.FRM.DEF) ' KG062302
IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _ ' KG062302
X$ = "MAIN" _ ' KG062302
ELSE X$ = ZConfName$ ' KG062302
PRINT "165. Number of records in " ;X$;" Message File ";STRING$(12-LEN(X$),"-");STR$(MAX.MSG.FILE.SIZE.FRM.DEF!) ' KG062302
PRINT "166. Maximum number of messages allowed ------------" ; STR$(MAX.ALLOWED.MSGS.FRM.DEF) ' KG062302
PRINT "167. Conference File Maintenance."
PRINT "168. Default extension for compressed files -------- " ; DEFAULT.EXTENSION$
PRINT "169. Additional extensions for compressed files ---- " ; COMPRESSED.EXT$
PRINT "170. Message file GROWS in size as messages added -- " ; FNYESNO$(MESSAGES.CAN.GROW)
GOTO 12580
------------------------[ KG062301 ]-------------------------
Problem: Value of config parameter on auto-add security does not
have a space separating it from the text.
Change CNFG-SUB.BAS as follows:
12466 DISPLAYED.PAGE.NUMBER = 8
GOSUB 24800
LOCATE 3,1
PRINT "141. Call-back verification ----------------------- " + NOT.YET.IN$ ' CALLBACK.VERIFICATION$
PRINT "142. Drive/path where personal files & dir stored - " + PERSONAL.DRVPATH$
PRINT "143. Name of Personal Directory ------------------- " + PERSONAL.DIR$
PRINT "144. Protocol required for personal downloads ----- " + MID$("<other><none> Ascii XMODEM Xm/CRC Kermit Ymodem Imodem YmodemGWxmodem", 7 * INSTR("NAXCKYIGW",PERSONAL.PROTOCOL$) + 1,7) ' EC060601
PRINT "145. Files with download security are listed in --- " + FILESEC.FILE$
PRINT "146. File name with privileged group passwords is - " + PASSWORD.FILE$
PRINT "147. Concatenate multi-file ASCII downloads ------- " + FNYESNO$(PERSONAL.CONCAT)
PRINT "148. Min SECURITY to CATEGORIZE uploads -----------" + STR$(SL.CATEGORIZE.UPLOADS)
PRINT "149. Min security level to view new uploads -------" + STR$(MIN.SEC.TO.VIEW)
PRINT "150. Security level exempt from 'epi-log' file ----" + STR$(SECURITY.EXEMPT.FROM.EPILOG)
PRINT "151. Min. security to 'AUTO ADD' conference user -- " + AUTO.ADD.SECURITY$ ' KG062301
PRINT "152. Min. security for old caller to turbo logon --" + STR$(ALLOW.CALLER.TURBO)
PRINT "153. Min. security to describe an existing file ---" + STR$(ADD.DIR.SECURITY)
PRINT "154. Help file to display for a security violation- " + SECVIO.HLP$
TIME.LOCK$ = MID$("<none> DOORS DOWNLDSBOTH ",TIME.LOCK*7+1,7)
PRINT "155. Time lock on DOORS and DOWNLOADS ------------- "; TIME.LOCK$
PRINT "156. Min. sec level exempt from auto-update of sec-" ; AUTO.UPGRADE.SEC
PRINT "157. Min security to READ & KILL all messages -----" ; SEC.KILL.ANY
PRINT "158. Do not display lines in msgs beginning with -- "; SCREEN.OUT.MSG$ ' KG041101
GOTO 12580
------------------------[ DA061001 ]-------------------------
Problem: When CONFIG creates a message base, it sets the LAST
message number in the checkpoint to 1. This should be 0. To
kludge around this, RBBS-PC.BAS checks for an empty message base,
and forces the first message to 1. This would allow multi-node
systems to get duplicate message 1's.
Solution: Change RBBS-PC.BAS as follows:
3405 GOSUB 4910
MsgRecSave$ = ZMsgRec$
MsgCorrected = ZFalse
GOSUB 23100
ZOutTxt$ = "Adding new msg #" + _
STR$(HighMsgNumber + 1)
IF NOT ZLocalUser THEN _
CALL UpdtCalr (ZOutTxt$,1)
GOSUB 12978
ZWasSL = 0
ZWasN$ = ""
ZLastIndex = 0
HighMsgNumber = HighMsgNumber + 1 ' DA061001
Solution: Change CONFIG.BAS as follows:
31040 LSET RR$ = " 0 " + _ ' NUMBER OF LAST MESSAGE ' DA061001
MKI$(0) + _ ' SECURITY LEVEL TO AUTO-ADD USER
SPACE$(116) + _ ' BLANKS IN ALL OTHER FIELDS
RIGHT$("0"+MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2),2)
RETURN
'
' * COMMON SUBROUTINE TO CREATE A BLANK "NODE" RECORD IN THE MESSAGE FILE
'
------------------------[ DA061002 ]-------------------------
Problem: When RBBS-PC is displaying a text file, and the user presses a
key, Smart Text translation stops.
Solution: Change RBBSSUB4.BAS as follows:
58301 CRat = INSTR(StartByte,Strng$,ZCarriageReturn$)
IF CRat > 0 AND CRat < WasL THEN _
CRFound = (MID$(Strng$,CRat + 1,1) = ZLineFeed$) _
ELSE CRFound = ZFalse
EOLlen = -2 * CRFound
IF CRFound THEN _
EOD = CRat _
ELSE EOD = WasL + 1
NumBytes = EOD - StartByte
StringWork$ = MID$(Strng$,StartByte,NumBytes)
IF NOT ZDeleteInvalid THEN _
GOTO 58302 ' DA061002
Index = INSTR(StringWork$,"[")
WasJ = LEN(StringWork$) - 1
WHILE Index > 0 AND Index < WasJ
IF MID$(StringWork$,Index + 2,1) = "]" THEN _
IF INSTR (ZInvalidOpts$,MID$(StringWork$,Index + 1,1)) THEN _
MID$(StringWork$,Index + 1,1) = "*"
Index = INSTR(Index + 1,StringWork$,"[")
WEND
58302 IF ZJumpSearching THEN _ ' DA061002
Temp$ = StringWork$ : _
CALL AllCaps (Temp$) : _
HiLitePos = INSTR (Temp$,ZJumpTo$) : _
IF HiLitePos = 0 THEN _
GOTO 58307 _
ELSE CALL Bracket (StringWork$,HiLitePos,HiLitePos+LEN(ZJumpTo$)-1,ZEmphasizeOn$,ZEmphasizeOff$) : _
ZJumpSearching = ZFalse
IF ZSmartTextCode THEN _
CALL SmartText (StringWork$, CRFound, ZFalse)
IF NOT ZLocalUser THEN _ ' DA061002
CALL EofComm (Char) : _ ' DA061002
IF Char <> -1 THEN _ ' DA061002
GOTO 58303 ' comm port input ' DA061002
ZKeyboardStack$ = INKEY$ : _ ' DA061002
IF ZKeyboardStack$ <> "" THEN _ ' keyboard input ' DA061002
GOTO 58303 ' DA061002
CALL QuickTPut (StringWork$, - (CRFound)) ' DA061002
GOTO 58304 ' DA061002
58303 ZOutTxt$ = StringWork$ ' DA061002
ZSubParm = 4 ' DA061002
IF CRFound THEN ZSubParm = 5 ' DA061002
CALL TPut ' DA061002
58304 IF ZRet THEN _ ' DA061002
EXIT SUB
IF ZLinesPrinted < ZFF THEN _
GOTO 58307
58405 WasTU = WasTU + 1
IF WasTU < NumRecs THEN _
GET 2,WasTU _
ELSE IF WasTU = NumRecs THEN _
GET 2,WasTU : _
WasX = INSTR(SeqRec$,CHR$(26)) : _
IF WasX = 0 OR WasX > LenLastRec THEN _
DataSize = LenLastRec _
ELSE DataSize = WasX - 1 _
ELSE GOTO 58419
CALL BufString (SeqRec$,DataSize,AbortIndex) ' DA061002
Omit lines 58406 and 58407.
------------------------[ DA060901 ]-------------------------
Problem: I filetered out the TAB character in the RBBS line editor
years ago. Thanks to suggestions (and CODE SAMPLES!) from Tim Gage, TAB
is allowed in the editor, and it does not cause errors as it did in the past.
Thanks to Tim Gage!
Solution: Change RBBSSUB2.BAS as follows:
(line 3700)
SUB LineEdit (MsgLine,MaxLen) STATIC
TabToSpace = 0 ' DA060901
LSET ZLineMes$ = ZOutTxt$(MsgLine)
Col = LEN(ZOutTxt$(MsgLine))
ZStopInterrupts = ZTrue
WasXXX = MaxLen - 3
ZWaitExpired = ZFalse
GOTO 3782
3730 IF TabToSpace > 0 THEN _ ' DA060901
WasX$ = " " : _ ' DA060901
TabToSpace = TabToSpace - 1 : _ ' DA060901
GOTO 3750 ' DA060901
CALL FindFKey ' DA060901
IF ZSubParm < 0 THEN _
EXIT SUB
WasX$ = ZKeyPressed$
IF WasX$ = "" THEN _
IF ZLocalUser THEN _
GOTO 3730 _
ELSE GOTO 3732
IF WasX$ = ZEscape$ THEN _
ZKeyPressed$ = WasX$ : _
EXIT SUB
SendRemote = ZTrue
WasZ = INSTR(ZLineEditChk$,WasX$)
IF WasZ < 1 THEN _
GOTO 3750 _
ELSE IF WasZ > 4 THEN _
GOTO 3870 _ ' DA060901
ELSE IF WasZ = 1 THEN _ ' DA060901
GOTO 3810 ' DA060901
IF ZLocalUser THEN _
GOTO 3730
3740 ON INSTR(ZLineEditChk$,WasX$) GOTO 3810,3730,3730,3730, _ ' DA060901
3870,3870,3870,3870,3870 ' DA060901
3810 TabToSpace = 5 - (Col MOD 5) ' DA060901
GOTO 3730 ' DA060901
------------------------[ KG061501 ]-------------------------
Problem: When have a timelock on downloads and stack the
files to download, the file names are misinterpreted as commands.
Solution: Change RBBSSUB4.BAS as follows:
(line 60180)
SUB TimeLock STATIC
CALL TimeRemain(MinsRemaining)
IF ZSecsUsedSession! >= ZTimeLockSet THEN _
ZOK = ZTrue : _
EXIT SUB
ZOutTxt$ = ZFirstName$
CALL NameCaps(ZOutTxt$)
CALL QuickTPut1 ("Sorry, " + ZOutTxt$ + ", function locked" + _
STR$(INT((ZTimeLockSet-ZSecsUsedSession!)/60)) + _' DA11102
" more minutes" + _
STR$(INT(ZTimeLockSet-ZSecsUsedSession!) MOD 60) + " seconds")
CALL BufFile(ZHelpPath$+"TIMELOCK"+ZHelpExtension$,WasX)
ZOK = ZFalse
ZLastIndex = 0 ' KG061501
END SUB
------------------------[ EC061301 ]-------------------------
Problem: File names not broken correctly into components when they
contain a period before the extension (e.g. "C:..\RBBS\AX.ZIP").
Solution: Change RBBSSUB5.BAS as follows:
(line 63300)
SUB BreakFileName (FileSpec$,DrvPath$,Prefix$,Extension$,ForJoining) STATIC
CALL AllCaps (FileSpec$)
DrvPath$ = ""
Prefix$ = ""
Extension$ = ""
CALL TrimTrail (FileSpec$,"\")
WasL = LEN(FileSpec$)
IF WasL < 1 THEN _
EXIT SUB
CALL FindLast (FileSpec$,"\",WasX,WasY)
IF WasX < 1 THEN _
IF MID$(FileSpec$,2,1) = ":" THEN _
DrvPath$ = LEFT$(FileSpec$,1) : _
ZWasS = 3 _
ELSE ZWasS = 1 _
ELSE DrvPath$ = LEFT$(FileSpec$,WasX-1) : _
ZWasS = WasX + 1 : _
IF WasY = 1 THEN _
DrvPath$ = DrvPath$ + "\"
WasX = INSTR(ZWasS,FileSpec$ + ".",".") ' EC061301
IF WasX < WasL THEN _
Extension$ = MID$(FileSpec$,WasX + 1)
IF ZWasS <= WasL THEN _
IF WasX >= ZWasS THEN _
Prefix$ = MID$(FileSpec$,ZWasS,WasX - ZWasS)
IF NOT ForJoining THEN _
EXIT SUB
IF LEN(DrvPath$) = 1 THEN _
IF DrvPath$ <> "\" THEN _
DrvPath$ = DrvPath$ + _
":"
IF INSTR(DrvPath$,"\") > 0 AND RIGHT$(DrvPath$,1) <> "\" THEN _
DrvPath$ = DrvPath$ + _
"\"
IF LEN(Extension$) > 0 THEN _
Extension$ = "." + _
Extension$
END SUB
------------------------[ EC060601 ]-------------------------
Problem: When set a required protocol for personal downloads in
configuration, can get illegal function call.
Solution: Change CNFG-SUB.BAS as follows:
12466 DISPLAYED.PAGE.NUMBER = 8
GOSUB 24800
LOCATE 3,1
PRINT "141. Call-back verification ----------------------- " + NOT.YET.IN$ ' CALLBACK.VERIFICATION$
PRINT "142. Drive/path where personal files & dir stored - " + PERSONAL.DRVPATH$
PRINT "143. Name of Personal Directory ------------------- " + PERSONAL.DIR$
PRINT "144. Protocol required for personal downloads ----- " + MID$("<other><none> Ascii XMODEM Xm/CRC Kermit Ymodem Im■dem YmodemGWxmodem", 7 * INSTR("NAXCKYIGW",PERSONAL.PROTOCOL$) + 1,7) ' EC060601
PRINT "145. Files with download security are listed in --- " + FILESEC.FILE$
PRINT "146. File name with privileged group passwords is - " + PASSWORD.FILE$
PRINT "147. Concatenate multi-file ASCII downloads ------- " + FNYESNO$(PERSONAL.CONCAT)
PRINT "148. Min SECURITY to CATEGORIZE uploads -----------" + STR$(SL.CATEGORIZE.UPLOADS)
PRINT "149. Min security level to view new uploads -------" + STR$(MIN.SEC.TO.VIEW)
PRINT "150. Security level exempt from 'epi-log' file ----" + STR$(SECURITY.EXEMPT.FROM.EPILOG)
PRINT "151. Min. security to 'AUTO ADD' conference user --" + AUTO.ADD.SECURITY$
PRINT "152. Min. security for old caller to turbo logon --" + STR$(ALLOW.CALLER.TURBO)
PRINT "153. Min. security to describe an existing file ---" + STR$(ADD.DIR.SECURITY)
PRINT "154. Help file to display for a security violation- " + SECVIO.HLP$
TIME.LOCK$ = MID$("<none> DOORS DOWNLDSBOTH ",TIME.LOCK*7+1,7)
PRINT "155. Time lock on DOORS and DOWNLOADS ------------- "; TIME.LOCK$
PRINT "156. Min. sec level exempt from auto-update of sec-" ; AUTO.UPGRADE.SEC
PRINT "157. Min security to READ & KILL all messages -----" ; SEC.KILL.ANY
PRINT "158. Do not display lines in msgs beginning with -- "; SCREEN.OUT.MSG$ ' KG041101
PRINT "159. Min. sec level to do personal uploads --------" ; ZMinSecPersUpld ' nc030101
PRINT "160. Let messages have multiple recipients -------- " ; FNYESNO$(ZEnableCC) ' nc030101
GOTO 12580
------------------------[ KG061001 ]-------------------------
Problem: When configure RBBS to begin individuation at a column
greater than 0, and length of individuation to be 0, get an
error which recover from properly but which is reported as
an untrapped error requiring attention. Also, indentation on
code is misleading and not in accordance with convention elsewhere.
Solution: Trap the error. Change RBBSSUB1.BAS as follows:
12600 ZWasY$ = IndivToLookFor$ + SPACE$(LenIndivField - LEN(IndivToLookFor$))
PosToReclaim = 0
ZErrCode = 0 ' KG061001
12610 GET 5,PosToUse
IF ZErrCode > 0 THEN _
IF ZErrCode = 63 THEN _
ZErrCode = 0 : _
GOTO 12621 _
ELSE ZErrCode = 0 : _
GOTO 12620 ' KG061001
HashValue$ = MID$(Filler$,StartHashPos,LenHashField)
IF WasX$ = HashValue$ THEN _
IF StartIndivPos < 1 THEN _
WhetherFound = ZTrue : _ ' KG061001
GOTO 12622 _ ' KG061001
ELSE IndivValue$ = MID$(Filler$,StartIndivPos,LenIndivField) : _
IF ZWasY$ = IndivValue$ OR IndivValue$ = EmptyIndiv$ THEN _
WhetherFound = ZTrue : _
GOTO 12622
IF HashValue$ = EmptyRec$ THEN _
PosToUse = PosToReclaim - (PosToReclaim = 0) * PosToUse : _
WhetherFound = ZFalse : _
GOTO 12622
IF ASC(HashValue$) = 0 OR INSTR(HashValue$,NewUser$) = 1 THEN _
IF PosToReclaim = 0 THEN _
PosToReclaim = PosToUse
Change line 65000 as follows:
.
.
.
'
' FindUser ERROR HANDLING
'
IF ERL = 12610 OR ERL = 12600 THEN _ ' KG061001
RESUME NEXT
'
' UpdtCalr ERROR HANDLING
'
.
.
.
------------------------[ KG060903 ]-------------------------
Problem: When have sysop status but not using remote sysop name,
message scan does not identify mail to/from "SYSOP" as belonging
to the caller. Mail to "SYSOP" should be shared by everyone with
sysop status.
Solution: Change RBBS-PC.BAS as follows:
4660 IF RemoteSysop THEN _
CALL MsgNameMatch ("SYSOP",SysopFullName$,6,MsgFromCaller) : _
CALL MsgNameMatch ("SYSOP",SysopFullName$,37,MsgToCaller) _
ELSE WasX$ = LEFT$("SYSOP",-5*ZSysop) : _ ' KG060903
CALL MsgNameMatch (MsgUserName$,WasX$,6,MsgFromCaller) : _ ' KG060903
CALL MsgNameMatch (MsgUserName$,WasX$,37,MsgToCaller) ' KG060903
UserInHeader = (MsgFromCaller OR MsgToCaller)
RETURN
------------------------[ KG060902 ]-------------------------
Problem: When leave a msg to public name of sysop, can say the user not
found and caution against leaving mail.
Solution: Change RBBSSUB2.BAS as follows:
2250 ' $SUBTITLE: 'WhoCheck - Checks whether user exists'
' $PAGE
'
' NAME -- WhoCheck
'
' INPUTS -- PARAMETER MEANING
' WhoFind$ User to find
'
' OUTPUTS -- WhoFound Whether user found
' UserNumFound Record # of user
'
' PURPOSE -- Validate that user record exists. Sysop
' counted as found even if lack user record.
'
SUB WhoCheck (WhoFind$,WhoFound,UserNumFound) STATIC
UserNumFound = 0
IF ZStartHash <> 1 THEN _
WhoFound = ZTrue : _
EXIT SUB
Work128$ = ZUserRecord$
WhoFound = ZFalse
ToSysop = (INSTR(WhoFind$,"SYSOP") > 0 OR _
INSTR(WhoFind$,ZSysopFirstName$ + " " + ZSysopLastName$) > 0) ' KG060902
CALL OpenUser (HighestUserRecord)
FIELD 5, 128 AS ZUserRecord$
IF ToSysop THEN _
WasX$ = ZSysopPswd1$ + " " + ZSysopPswd2$ _
ELSE WasX$ = WhoFind$
IF LEN(WasX$) > 1 THEN _
CALL FindUser (WasX$,"",ZStartHash,ZLenHash,_
0,0,HighestUserRecord,WhoFound,_
UserNumFound,ZWasSL)
LSET ZUserRecord$ = Work128$
IF NOT WhoFound THEN _
IF ToSysop THEN _
WhoFound = ZTrue _
ELSE CALL QuickTPut1 (WhoFind$ + " not active user")
END SUB
------------------------[ KG060901 ]-------------------------
Problem: When leave mail to person not found because not in user file,
will still say the receiver "will be notified" has mail waiting, even though
can't and won't.
Solution: Change RBBSUB2.BAS as follows:
2032 IF MsgTo$ <> "ALL" THEN _
IF (LEFT$(MsgTo$,4) <> "ALL " AND ZStartHash = 1) THEN _
ZWasDF = INSTR(MsgTo$+" @"," @") : _ ' KG052201
TempHashValue$ = LEFT$(MsgTo$,ZWasDF-1) : _ ' KG052201
CALL WhoCheck (TempHashValue$,Found,RcvrRecNum) : _
IF NOT Found THEN _
ZLastIndex = 0 : _
RcvrRecNum = 0 : _ ' KG060901
IF NOT ZReply THEN _
ZOutTxt$ = "[R]e-enter name, Q)uit, C)ontinue" : _
ZTurboKey = -ZTurboKeyUser : _
ZLastIndex = 0 : _
GOSUB 2033 : _
ZWasZ$ = ZUserIn$(1) : _
CALL AllCaps (ZWasZ$) : _
IF ZWasZ$ <> "C" THEN _
MsgTo$ = "" : _
IF ZWasZ$ <> "Q" THEN _
GOTO 2020
IF MsgTo$ = Temp$ THEN _
ZOutTxt$ = "Msg would be from and to SAME PERSON! Really do this (Y,[N])" : _
ZLastIndex = 0 : _
GOSUB 2033 : _
IF NOT ZYes THEN _
MsgTo$ = ""
EXIT SUB
------------------------[ KG060103 ]-------------------------
Problem: Valid individuation fields are rejected by CONFIG was
conflicting with download ratios. E.g. begin at 63, length 2,
should be ok (1st two characters of location) but is rejected.
Solution: Change CONFIG.BAS as follows:
18102 IF START.INDIV = 0 OR LEN.INDIV = 0 THEN_
INDIV.ID$ = NONE.PICKED$ _
ELSE INDIV.ID$ = "(nonstandard)"
START.WRITE = START.INDIV
LEN.WRITE = LEN.INDIV ' KG060103
GOSUB 17805
IF NOT OK THEN _
START.INDIV = 0 : _
LEN.INDIV = 31 : _
GOTO 18102
START.WRITE = START.INDIV
RETURN
------------------------[ KG060102 ]-------------------------
Problem: When use MiteSized version of RBBS, version name grows
by "/MITESIZE" every time enter a subboard.
Solution: Replace RBBSLIT.MRG and MITEVER.LIT by the enclosed
new ones.
------------------------[ KG060101 ]-------------------------
Problem: (fix to a fix) Remote SysOp name logged to callers
file when it should not be.
Solution: Change RBBS-PC.BAS as follows:
(line 800)
.
.
.
CALL SetCrLf
CALL SetPrompt
CALL XferType (2,ZTrue)
IF NOT SubBoard THEN _
BoardCheckDate$ = PrevLastOn$
GOSUB 5370 ' KG060101
IF ZWasA THEN _ ' KG060101
ZActiveUserName$ = "SYSOP" ' KG060101
IF ZExitToDoors OR SubBoard THEN _ ' KG052701
GOTO 815
GOSUB 465
IF (ZEightBit AND _
ZAutoDownDesired) OR _
ZAskID THEN _
CALL TestUser
.
.
.
819 CALL Trim (ZWasCI$) ' KG060101
IF (ZNodeRecIndex < 2) THEN _
GOTO 821
GOSUB 4910
GOSUB 24000
GET 1,ZNodeRecIndex
MID$(ZMsgRec$,1,31) = ZActiveUserName$ + _
SPACE$(31 - LEN(ZActiveUserName$))
MID$(ZMsgRec$,40,2) = " 0"
MID$(ZMsgRec$,44,2) = STR$(ZBPS)
MID$(ZMsgRec$,55,2) = " 0"
MID$(ZMsgRec$,57,1) = "A"
MID$(ZMsgRec$,60,5) = ZTalkToModemAt$ + _
SPACE$(5 - LEN(ZTalkToModemAt$))
MID$(ZMsgRec$,72,2) = " 0"
MID$(ZMsgRec$,93,24) = ZWasCI$ + _
SPACE$(24)
PUT 1,ZNodeRecIndex
GOSUB 12985
------------------------[ MB052101 ]-------------------------
Problem: When have colorization active, color from prior context
will sometimes spill into the report of # of minutes left.
Solution: Change RBBSSUB3.BAS as follows:
41032 ' $SUBTITLE: 'DispTimeRemain - Display users time remaining'
' $PAGE
'
' NAME -- DispTimeRemain
'
' INPUTS -- PARAMETER MEANING
' MinsRemaining
'
' OUTPUTS -- PARAMETER MEANING
' MinsRemaining TIME IN MINUTES LEFT IN SESSION
'
SUB DispTimeRemain (MinsRemaining) STATIC
CALL TimeRemain (MinsRemaining)
CALL QuickTPut1 (ZEmphasizeOff$ + STR$(MinsRemaining) + " min left") ' MB052101
END SUB
------------------------[ RC050901 ]-------------------------
Problem: When return from a door and individuating callers
with same name, the individuation field is always asked,
whereas it should never ask for individuation (just like it
never asks again for name, just password at most).
Solution: Add the following variable to RBBS-VAR.BAS: ZIndivValue$.
Change RBBS-PC.BAS as follows:
725 IF ZUserSecLevel < ZMinLogonSec THEN _
ZLogonErrorIndex = 1 : _
GOTO 460
IF ZFirstName$ = ZLastName$ THEN _
CALL QuickTPut1 (ZFirstNamePrompt$+"/"+ZLastNamePrompt$+" cannot be same") : _
ZLogonErrorIndex = 3 : _
GOTO 10620
IF NOT ZRememberNewUsers THEN _
GOSUB 13700 : _
ZUserFileIndex = 0 : _
GOSUB 12960: _
PrevLastOn$ = "00-00-00": _
GOTO 735
ZNewUser = ZTrue
CALL OpenUser (HighestUserRecord)
GOSUB 9450
GOSUB 12630
MID$(ZUserRecord$,ZStartHash,ZLenHash) = LEFT$("NEWUSER",ZLenHash)
IF ZStartIndiv > 0 THEN _ ' RC050901
MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$ ' RC050901
GOSUB 9440
(line 800)
.
.
.
'
' * ALWAYS RECORD THE HASH/INDIVIDUATING FIELD TO EACH RECORD LOGGED OUT
'
WasX$ = "{" + _ ' KG052701
HashValue$ + _ ' KG052701
"/" + _ ' KG052701
ZIndivValue$ + _ ' RC050901
"}" ' KG052701
IF LEN(ZWasZ$) < 65 THEN _ ' KG052701
WasX = 65 _ ' KG052701
ELSE WasX = LEN(ZWasZ$) + 2 ' KG052701
MID$(ZWasNG$,WasX) = WasX$ ' KG052701
CALL Printit (" " + ZWasZ$) ' KG052701
IF ZNewUser THEN _ ' KG052701
CALL UpdtCalr ("NEWUSER",1) : _ ' KG052701
CALL Muzak (2) ' KG052701
'
' ***** NOTIFY CALLER IF ABLE TO "AUTODOWN" ****
'
.
.
.
815 ZDnlds = CVI(ZUserDnlds$)
ZUplds = CVI(ZUserUplds$)
IF ZEnforceRatios THEN _
ZDLToday! = CVS(ZTodayDl$) : _
ZBytesToday! = CVS(ZTodayBytes$) : _
ZDLBytes! = CVS(ZDlBytes$) : _
ZULBytes! = CVS(ZULBytes$)
IF ZCurDate$ <> LEFT$(ZLastDateTimeOnSave$,8) THEN _
ZDLToday! = 0 : _
ZBytesToday! = 0
IF NOT GlobalsSet THEN _
GlobalsSet = ZTrue : _
ZGlobalDnlds = ZDnlds : _
ZGlobalUplds = ZUplds : _
ZGlobalDLToday! = ZDLToday! : _
ZGlobalBytesToday! = ZBytesToday! : _
ZGlobalDLBytes! = ZDLBytes! : _
ZGlobalULBytes! = ZULBytes!
'IF ZRatioRestrict# > 0 AND ZEnforceRatios THEN _
' IF ZByteMethod = 0 AND ZUplds < ZInitialCredit# THEN _
' ZUplds = ZInitialCredit# _
' ELSE IF ZByteMethod = 1 AND ZULBytes! < ZInitialCredit# THEN _
' ZULBytes! = ZInitialCredit#
GOSUB 827
LSET ZUserOption$ = MKI$(ZTimesLoggedOn) + _
MID$(ZUserOption$,3)
LSET ZLastDateTimeOn$ = ZCurDate$ + _
" " + _
ZTimeLoggedOn$
MID$(ZUserRecord$,ZStartHash,ZLenHash) = HashValue$
IF ZStartIndiv > 0 THEN _
MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$ ' RC050901
LSET ZUserName$ = ZOrigUserName$
IF (NOT ZExitToDoors) AND NOT (ZOrigMsgFile$ = ZActiveMessageFile$ AND SubBoard) THEN _
CALL AutoPage
IF NOT SubBoard THEN _
ZOrigUserFileIndex = ZUserFileIndex
GOSUB 9440
GOSUB 12991
CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue)
IF TurboLogon THEN _
GOTO 819
IF SkipWelcomeScreen AND _
(ZUserSecLevel >= ZAllowCallerTurbo) THEN _
GOTO 816
IF NOT SameUser THEN _
ZStopInterrupts = NOT ZWelcomeInterruptable : _
ZBypassTimeCheck = ZTrue : _
ZFileName$ = ZWelcomeFile$ : _
ZDisplayAsUnit = ZTrue : _
GOSUB 1790 : _
ZDisplayAsUnit = ZFalse
ZBypassTimeCheck = ZFalse
ZStopInterrupts = ZTrue
12300 WasA1$ = ""
Attempts = 0
UserSecLevelSave = ZUserSecLevel
FirstNameSave$ = ZFirstName$
LastNameSave$ = ZLastName$
ActiveUserNameSave$ = ZActiveUserName$
CityStateSave$ = ZWasCI$
HashValueSave$ = HashValue$
IndivValueSave$ = ZIndivValue$ ' RC050901
GOSUB 12500
GOSUB 12840
GOSUB 12850
GOSUB 12598
IF ZUserFileIndex = 0 THEN _
GOSUB 12984 : _
GOTO 12330
IF Found THEN _
WasD$ = "User already exists" : _
GOSUB 1315 : _
GOSUB 12984 : _
GOTO 12330
12310 GOSUB 12630
GOSUB 12800
GOSUB 11395
ZTempSecLevel = WasOF
GOSUB 12900
LSET ZLastDateTimeOn$ = ZCurDate$ + _
" " + _
ZTimeLoggedOn$
GOSUB 12960
CALL AllCaps (ZUserIn$)
LSET ZCityState$ = ZUserIn$
LSET ZElapsedTime$ = MKI$(0)
IF ZStartHash > 1 THEN _
MID$(ZUserRecord$,ZStartHash,ZLenHash) = HashValue$
IF ZStartIndiv > 1 THEN _
MID$(ZUserRecord$,ZStartIndiv,ZLenIndiv) = ZIndivValue$ ' RC050901
GOSUB 9440
12330 ZUserSecLevel = UserSecLevelSave
ZFirstName$ = FirstNameSave$
ZLastName$ = LastNameSave$
ZActiveUserName$ = ActiveUserNameSave$
ZWasCI$ = CityStateSave$
HashValue$ = HashValueSave$
ZIndivValue$ = IndivValueSave$ ' RC050901
ZUserFileIndex = WasTU
LSET ZUserRecord$ = UserRecordHold$
GOTO 11001
12598 TempHashValue$ = HashValue$
TempIndivValue$ = ZIndivValue$ ' RC050901
12850 IF ZStartIndiv < 1 THEN _
RETURN
IF ZStartIndiv = 1 THEN _
ZIndivValue$ = ZActiveUserName$ : _ ' RC050901
RETURN
IF ZExitToDoors THEN _ ' RC050901
RETURN ' RC050901
WasX$ = WasA1$ + _
ZPromptIndiv$
CALL UntilRight (WasX$,ZIndivValue$,2,ZLenIndiv) ' RC050901
RETURN
Change RBBSSUB3.BAS as follows:
43070 ZActiveMessageFile$ = ZOrigMsgFile$
ZSubParm = 3
CALL FileLock
CALL OpenMsg
FIELD 1, 128 AS ZMsgRec$
GET 1,ZNodeRecIndex
IF ZGlobalSysop THEN _
MID$(ZMsgRec$,1,30) = "SYSOP" + SPACE$(25)
MID$(ZMsgRec$,40,2) = STR$(ZExitToDoors)
MID$(ZMsgRec$,42,2) = STR$(ZEightBit)
MID$(ZMsgRec$,44,2) = STR$(ZBPS)
MID$(ZMsgRec$,46,2) = STR$(ZUpperCase)
MID$(ZMsgRec$,48,5) = MKS$(ZNumDnldBytes!) + MID$(STR$(-ZBatchTransfer),2) ' KG022101
MID$(ZMsgRec$,53,2) = STR$(ZWasGR)
MID$(ZMsgRec$,55,2) = STR$(ZSysop)
MID$(ZMsgRec$,65,3) = CHR$(VAL(LEFT$(ZTimeLoggedOn$,2))) + _
CHR$(VAL(MID$(ZTimeLoggedOn$,4,2))) + _
CHR$(VAL(MID$(ZTimeLoggedOn$,7,2)))
MID$(ZMsgRec$,72,2) = STR$(ZPrivateDoor)
MID$(ZMsgRec$,74,1) = MID$(STR$(ZTransferFunction),2,1)
MID$(ZMsgRec$,75,1) = ZWasFT$
MID$(ZMsgRec$,113,2) = MKI$(CINT(ZTimeCredits!)/60)
MID$(ZMsgRec$,79,8) = LEFT$(ZDooredTo$+" ",8)
MID$(ZMsgRec$,91,2) = STR$(ZReliableMode)
CALL BreakFileName (ZCurPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZFalse)
MID$(ZMsgRec$,93,8) = ZUserIn$ + SPACE$(8 - LEN(ZUserIn$))
IF ZLocalUser THEN _
ZWasZ$ = ZCarriageReturn$ + ZCarriageReturn$ _ ' KG030601
ELSE ZWasZ$ = " 0" ' KG030601
MID$(ZMsgRec$,101,2) = ZWasZ$ ' KG030601
MID$(ZMsgRec$,103,2) = STR$(ZLocalUserMode) ' KG030601
ZConfName$ = LEFT$(ZConfName$,INSTR(ZConfName$ + " "," ") - 1)
MID$(ZMsgRec$,105,8) = ZConfName$ + SPACE$(8 - LEN(ZConfName$))
MID$(ZMsgRec$,115,1) = MID$(STR$(ZAutoLogoffReq),2,1)
MID$(ZMsgRec$,117,2) = STR$(ZMenuIndex)
MID$(ZMsgRec$,119,2) = LEFT$(DATE$,2)
MID$(ZMsgRec$,121,2) = MID$(DATE$,4,2)
MID$(ZMsgRec$,123,2) = RIGHT$(DATE$,2)
MID$(ZMsgRec$,125,2) = LEFT$(TIME$,2)
MID$(ZMsgRec$,127,2) = MID$(TIME$,4,2)
' *** Save additional parameters for door restoral
CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
CALL PrintWorkA (STR$(ZLimitMinsPerSession))
CALL PrintWorkA (ZWasNG$) ' KG052701
CALL PrintWorkA (ZIndivValue$) ' NC050901
CLOSE 2
44003 ZUserLogonTime! = VAL(HourLoggedOn$) * 3600! + _ ' KK030901
VAL(MinLoggedOn$) * 60! + _ ' KK030901
VAL(SecLoggedOn$)
HourLoggedOn$ = ""
MinLoggedOn$ = ""
SecLoggedOn$ = ""
IF ZMinsPerSession < 1 THEN _
ZMinsPerSession = 3
IF NOT ZEightBit THEN _
OUT ZLineCntlReg,&H1A
IF LEFT$(ZMsgRec$,7) = "SYSOP " THEN _
ZFirstName$ = ZSysopPswd1$ : _
ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ _
ELSE ZFirstNameEnd = INSTR(ZMsgRec$," ") : _
ZLastNameEnd = INSTR(ZFirstNameEnd + 1,ZMsgRec$ + " "," ") : _
ZFirstName$ = LEFT$(ZMsgRec$,ZFirstNameEnd-1) : _
ZLastName$ = MID$(ZMsgRec$,ZFirstNameEnd + 1,ZLastNameEnd - (ZFirstNameEnd + 1)) : _
ZActiveUserName$ = MID$(ZFirstName$ + " " + ZLastName$,1,31)
ZWasZ$ = ZFirstName$
CALL OpenWork (2,ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
CALL ReadDir (2,1)
ZLimitMinsPerSession = VAL (ZOutTxt$)
CALL ReadDir (2,1) ' KG052701
ZWasNG$ = ZOutTxt$ ' KG052701
CALL ReadDir (2,1) ' RC050901
ZIndivValue$ = ZOutTxt$ ' RC050901
CLOSE 2
END SUB
------------------------[ KG052901 ]-------------------------
Problem: When using Programmable User Interface, macros will not
work after do a join to a conference that does not exist or after
execute conference view and go to end of list without joining
anything. Problem reported by Ken Humrich.
Solution: Change RBBS-PC.BAS as follows:
1232 MID$(ZLastCommand$,2,1) = " " ' KG052901
IF ZCustomPUI THEN _ ' KG052901
CALL UserFace (ZUserGraphicDefault$) : _
GOSUB 12997 : _
GOTO 1235 ' KG052901
ZOutTxt$ = ZCmdPrompt$
GOSUB 12930
IF ZWasQ = 0 THEN _
GOTO 1230
------------------------[ KG052702 ]-------------------------
Problem: In local mode, when log to printer, not logging to
caller's file. This messages up caller analysis on networks.
Also, unnecessary code check when entering/exiting a conference
because check is done in logging routine. Finally,
entrance/exit to conference made to log all the time and not just
on extended logging.
Solution: Change RBBS-PC.BAS as follows:
4900 CALL UpdtCalr ("Entered " + ZConfName$,2) ' KG052702
CALL QuickTPut1 ("Welcome to " + ZConfName$)
5350 IF ZConfName$ <> "MAIN" THEN _
CALL QuickTPut1 ("Rejoining " + OrigMsgName$)
ZConfName$ = "MAIN"
ConfFileName$ = OrigMsgName$
ZNewsFileName$ = OrigNewsFileName$
TurboLogon = ZTrue
ZWasQ = 0
ZInConfMenu = ZTrue
IF ZActiveUserName$ = "SYSOP" THEN _
ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ : _
CALL Trim (ZActiveUserName$)
ZConfigFileName$ = ZOrigCnfg$
CALL ReadDef (ZConfigFileName$)
IF ZOrigMsgFile$ <> ZActiveMessageFile$ THEN _
ZActiveMessageFile$ = ZOrigMsgFile$ : _
GOSUB 5343
IF ZOrigUserFile$ <> ZActiveUserFile$ THEN _
GOSUB 5380 : _
ZActiveUserFile$ = ZOrigUserFile$ : _
ZActiveUserName$ = ZOrigUserName$ : _
GOSUB 12598 : _
GOSUB 12990 : _
IF Found THEN _
GOSUB 9500 : _
ZMainUserFileIndex = ZUserFileIndex : _
CALL SetPrompt : _
CALL XferType (2,ZTrue) _
ELSE ZUserFileIndex = 0 : _
ZMainUserFileIndex = 0
CALL UpdtCalr ("Exited Conference",2) ' KG052702
GOSUB 2350
ZUplds = ZGlobalUplds
ZDnlds = ZGlobalDnlds
ZDLToday! = ZGlobalDLToday!
ZBytesToday! = ZGlobalBytesToday!
ZDLBytes! = ZGlobalDLBytes!
ZULBytes! = ZGlobalULBytes!
Change RBBSSUB1.BAS as follows:
13670 LSET ZCallersRecord$ = WasX$
CALL Printit (ZCallersRecord$) ' KG052702
ZCallersFileIndex! = ZCallersFileIndex! + 1
------------------------[ KG052701 ]-------------------------
Problem: When join subboards, the time shown in callers file
for logon is the time joined last subboard rather than original
time logged on.
Solution: Change RBBS-PC.BAS as follows:
Omit code at line 837.
800 CALL DoorReturn
IF ZAdjustedSecurity THEN _
GOSUB 5135
IF ZOrigCnfg$ = ZCurDef$ THEN _
ZMainUserFileIndex = ZUserFileIndex : _
ZOrigSec = ZUserSecLevel : _
ZUserSecSave = ZUserSecLevel : _
ZOrigUserName$ = ZActiveUserName$
ZTimesLoggedOn = CVI(MID$(ZUserOption$,1,2)) - _
((ZOrigCnfg$ <> ZCurDef$ OR NOT SubBoard) AND _
(NOT ZPrivateDoor) AND (NOT ZExitToDoors))
GOSUB 9500
IF (NOT ZExitToDoors) AND (NOT SubBoard) THEN _
CALL UpdtCalr (ZActiveUserName$ + " from " + ZWasCI$ + _
" Lvl" + STR$(ZUserSecLevel) + " " + TIME$,2)
PrevLastOn$ = ZLastDateTimeOn$
IF ZLocalUser THEN _
ZTalkToModemAt$ = "9600" : _
ZBaudParity$ = "9600 BAUD,N,8,1" : _
ZModemInitBaud$ = "9600" : _
ZSnoop = ZTrue : _
ZLineFeeds = ZTrue
CALL SetCrLf
CALL SetPrompt
CALL XferType (2,ZTrue)
IF NOT SubBoard THEN _
BoardCheckDate$ = PrevLastOn$
IF ZExitToDoors OR SubBoard THEN _ ' KG052701
GOTO 815
GOSUB 465
IF (ZEightBit AND _
ZAutoDownDesired) OR _
ZAskID THEN _
CALL TestUser
CALL QuickTPut1 ("Logging " + ZActiveUserName$)
CALL Talk (1,ZOutTxt$)
CALL QuickTPut1 ("RBBS-PC " + ZVersionID$ + " NODE " + ZNodeID$ + _
", OPERATING AT " + ZBaudParity$)
CALL SkipLine (1)
Attempts = 0
ZWasZ$ = ZActiveUserName$ + _ ' KG052701
" on at " + _ ' KG052701
ZCurDate$ + _ ' KG052701
", " + _ ' KG052701
ZTime$ + _ ' KG052701
" from " + _ ' KG052701
ZWasCI$ + _ ' KG052701
", " + _ ' KG052701
ZBaudParity$ ' KG052701
ZWasNG$ = ZWasZ$ + SPACE$(128 - LEN(ZWasZ$)) ' KG052701
MsgUserName$ = LEFT$(ZActiveUserName$+" ",22) ' KG052701
'
' * ALWAYS RECORD THE HASH/INDIVIDUATING FIELD TO EACH RECORD LOGGED OUT
'
WasX$ = "{" + _ ' KG052701
HashValue$ + _ ' KG052701
"/" + _ ' KG052701
IndivValue$ + _ ' KG052701
"}" ' KG052701
IF LEN(ZWasZ$) < 65 THEN _ ' KG052701
WasX = 65 _ ' KG052701
ELSE WasX = LEN(ZWasZ$) + 2 ' KG052701
MID$(ZWasNG$,WasX) = WasX$ ' KG052701
CALL Printit (" " + ZWasZ$) ' KG052701
IF ZNewUser THEN _ ' KG052701
CALL UpdtCalr ("NEWUSER",1) : _ ' KG052701
CALL Muzak (2) ' KG052701
'
' ***** NOTIFY CALLER IF ABLE TO "AUTODOWN" ****
'
IF ZEightBit AND ZAutoDownYes THEN _
ZOutTxt$ = CHR$(9) + _
ZReturnLineFeed$ + _
"You may use AUTODOWNLOADing!" : _
CALL RingCaller : _
CALL DelayTime(4)
Change RBBSSUB3.BAS as follows:
(line 43070)
.
.
.
' *** Save additional parameters for door restoral
CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
CALL PrintWorkA (STR$(ZLimitMinsPerSession))
CALL PrintWorkA (ZWasNG$) ' KG052701
CLOSE 2
44003 ZUserLogonTime! = VAL(HourLoggedOn$) * 3600! + _ ' KK030901
VAL(MinLoggedOn$) * 60! + _ ' KK030901
VAL(SecLoggedOn$)
HourLoggedOn$ = ""
MinLoggedOn$ = ""
SecLoggedOn$ = ""
IF ZMinsPerSession < 1 THEN _
ZMinsPerSession = 3
IF NOT ZEightBit THEN _
OUT ZLineCntlReg,&H1A
IF LEFT$(ZMsgRec$,7) = "SYSOP " THEN _
ZFirstName$ = ZSysopPswd1$ : _
ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ _
ELSE ZFirstNameEnd = INSTR(ZMsgRec$," ") : _
ZLastNameEnd = INSTR(ZFirstNameEnd + 1,ZMsgRec$ + " "," ") : _
ZFirstName$ = LEFT$(ZMsgRec$,ZFirstNameEnd-1) : _
ZLastName$ = MID$(ZMsgRec$,ZFirstNameEnd + 1,ZLastNameEnd - (ZFirstNameEnd + 1)) : _
ZActiveUserName$ = MID$(ZFirstName$ + " " + ZLastName$,1,31)
ZWasZ$ = ZFirstName$
CALL OpenWork (2,ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
CALL ReadDir (2,1)
ZLimitMinsPerSession = VAL (ZOutTxt$)
CALL ReadDir (2,1) ' KG052701
ZWasNG$ = ZOutTxt$ ' KG052701
CLOSE 2
END SUB
------------------------[ KG052401 ]-------------------------
Problem: When shell to a door and it writes information to
the callers file, the entries are overwritten when returns to
RBBS.
Solution: Add the following variable to RBBS-VAR.BAS:
ZPrevCaller$. Change RBBSSUB1.BAS as follows:
(line 108)
SUB SetCall STATIC
ON ERROR GOTO 65000
IF ZPrevCaller$ = ZCallersFile$ OR ZCallersFilePrefix$ = "" THEN _ ' KG052401
EXIT SUB
ZPrevCaller$ = ZCallersFile$ ' KG052401
ZCallersFileIndex! = 1
CLOSE 2
CLOSE 4
IF ZShareIt THEN _
OPEN ZCallersFile$ FOR RANDOM SHARED AS #4 LEN=64 _
ELSE OPEN "R",4,ZCallersFile$,64
FIELD 4,64 AS ZCallersRecord$
IF LOF(4) > 0 THEN _
ZCallersFileIndex! = LOF(4) / 64
IF ZCallersFileIndex! < 1 THEN _
ZCallersFileIndex! = 0
ZUserIn$ = STRING$(13,0)
Change RBBSUB2.BAS as follows:
10989 IF ZTransferFunction = 3 THEN _
ZWasY$ = "Registration" _
ELSE ZWasY$ = ZDooredTo$
ZOutTxt$ = ZWasY$ + _
" door opened at " + _
TIME$ + _
" on " + _
DATE$
ZSubParm = 5
CALL TPut
CALL UpdtCalr (ZDooredTo$ + " door opened!",2)
CLOSE 2
OPEN "O",2,"DORINFO" + _
ZNodeFileID$ + _
".DEF"
PRINT #2,ZRBBSName$
PRINT #2,ZSysopFirstName$
PRINT #2,ZSysopLastName$
IF ZLocalUser THEN _
PRINT #2,"COM0" _
ELSE PRINT #2,ZComPort$
ZUserIn$ = MID$(ZBaudParity$,INSTR(ZBaudParity$," B"))
PRINT #2,ZTalkToModemAt$;ZUserIn$
PRINT #2,ZNetworkType
IF ZGlobalSysop THEN _
PRINT #2,"SYSOP" : _
PRINT #2,"" _
ELSE PRINT #2,ZFirstName$ : _
PRINT #2,ZLastName$
PRINT #2,ZCityState$
PRINT #2,ZWasGR
PRINT #2,ZUserSecLevel
CALL TimeRemain (MinsRemaining)
CALL CheckInt (DoorTime$)
IF ZErrCode = 0 AND ZTestedIntValue > 0 THEN _
IF MinsRemaining > ZTestedIntValue THEN _
MinsRemaining = ZTestedIntValue
PRINT #2,INT(MinsRemaining)
PRINT #2,ZFossil
IF ExitMethod$ = "S" THEN _
CLOSE 4 : _ ' KG052401
CALL ShellExit (ExitTemplate$) : _
ZPrevCaller$ = "" : _ ' KG052401
CALL SetCall : _ ' KG052401
ZExitToDoors = ZTrue : _
CALL BufFile (ZDoorDisplay$,WasX) : _
CALL DoorReturn _
ELSE ZOutTxt$(1) = ZDiskForDos$ + _
"COMMAND /C " + _
ExitTo$ : _
ZOutTxt$(2) = ZRBBSBat$ : _
CALL RBBSExit (ZOutTxt$(),2)
END SUB
------------------------[ KG052201 ]-------------------------
Problem: Set echomail processors want to add "@ <node#>" after the
name of the person sending mail. But then, when person replies,
name is never found for setting mail waiting.
Solution: Reguard name as terminated with first "@".
Change RBBSSUB2.BAS as follows:
2032 IF MsgTo$ <> "ALL" THEN _
IF (LEFT$(MsgTo$,4) <> "ALL " AND ZStartHash = 1) THEN _
ZWasDF = INSTR(MsgTo$+" @"," @") : _ ' KG052201
TempHashValue$ = LEFT$(MsgTo$,ZWasDF-1) : _ ' KG052201
CALL WhoCheck (TempHashValue$,Found,RcvrRecNum) : _
IF NOT Found THEN _
ZLastIndex = 0 : _
IF NOT ZReply THEN _
ZOutTxt$ = "[R]e-enter name, Q)uit, C)ontinue" : _
ZTurboKey = -ZTurboKeyUser : _
ZLastIndex = 0 : _
GOSUB 2033 : _
ZWasZ$ = ZUserIn$(1) : _
CALL AllCaps (ZWasZ$) : _
IF ZWasZ$ <> "C" THEN _
MsgTo$ = "" : _
IF ZWasZ$ <> "Q" THEN _
GOTO 2020
IF MsgTo$ = Temp$ THEN _
ZOutTxt$ = "Msg would be from and to SAME PERSON! Really do this (Y,[N])" : _
ZLastIndex = 0 : _
GOSUB 2033 : _
IF NOT ZYes THEN _
MsgTo$ = ""
EXIT SUB
Change RBBSSUB5.BAS as follows:
63540 ' Match Name to one in message file
SUB MsgNameMatch (PrimeName$,AltName$,SearchPos,Found) STATIC
WasX$ = LEFT$(PrimeName$+" ",22-8*(SearchPos < 7))
GOSUB 63542 ' KG052201
IF Found OR AltName$ = "" THEN _ ' KG052201
EXIT SUB ' KG052201
WasX$ = LEFT$(AltName$ + " ",22-8*(SearchPos < 7))
GOSUB 63542 ' KG052201
EXIT SUB ' KG052201
63542 WasY$ = MID$(ZMsgRec$,SearchPos,LEN(WasX$)) ' KG052201
ZWasDF = INSTR(WasY$,"@") ' KG052201
IF ZWasDF > 0 THEN _ ' KG052201
MID$(WasY$,ZWasDF) = " " ' KG052201
Found = (WasY$ = WasX$) ' KG052201
RETURN ' KG052201
END SUB
------------------------[ DA042401 ]-------------------------
Problem: Get an infinite loop when do an file S)earch and hit a
string in the extended description you have insufficient suecurity
to view because is protected by a security level (= in front of name).
Solution: Change RBBSSUB3.BAS as follows:
58169 CALL CheckInt (MID$(PartToPrint$,34))
IF ZUserSecLevel < ZTestedIntValue THEN _
LastOK = ZFalse : _
FailedSearch = ZFalse : _ ' DA042401
GOTO 58168
MID$(PartToPrint$,1,13) = MID$(PartToPrint$,2,12) + " "
ZWasA = LEN(STR$(ZTestedIntValue))
MID$(PartToPrint$,34) = MID$(PartToPrint$,34 + ZWasA) + SPACE$(ZWasA)
GOTO 58172
------------------------[ KG051702 ]-------------------------
Problem: When security for K)ill command set too high to use,
caller still presented with K option in msg read when reading own
mail.
Solution: Change RBBS-PC.BAS as follows:
4600 IF ScanMsgs THEN _
GOSUB 8020 : _
GOTO 4630
IF NOT JustSearching THEN _
GOSUB 8000 : _
IF QuotedReply THEN _
QuotedReply = ZFalse : _
GOTO 4610
IF ZRet THEN _
GOTO 4630
CanChangeSec = (ZUserSecLevel => ZSecChangeMsg)
WasI = - ((ZUserSecLevel >= ZOptSec(9)) AND (UserInHeader OR CanKill)) ' KG051702
IF ZExpertUser THEN _
WasA1$ = ",R,T,=,+,-" + _
MID$(",F",1,- (UserInHeader OR CanChangeSec) * 2) + _
MID$(",K",1,WasI * 2) + _ ' KG051702
MID$(",U",1,- (ZUserSecLevel >= ZOptSec(54)) * 2) + _
MID$(",S",1, - CanChangeSec * 2) _
ELSE WasA1$ = ",R)eply,T)hread,=)again,+,-" + _
MID$(",F)wd",1, - (UserInHeader OR CanChangeSec) * 5) + _
MID$(",K)ill",1, WasI * 6) + _ ' KG051702
MID$(",U)ser",1,- (ZUserSecLevel >= ZOptSec(54)) * 6) + _
MID$(",S)ec",1, - CanChangeSec * 5)
ZTurboKey = -ZTurboKeyUser
IF JustSearching OR NOT JustReplied THEN _
GOTO 4610
JustReplied = ZFalse
CALL AskMore (WasA1$,ZTrue,ZFalse,ZAnsIndex,ZFalse)
CALL SkipLine (1)
IF ZNo THEN _
RETURN
CALL AllCaps (ZUserIn$)
ZReply = (ZReply OR ZUserIn$ = "R")
IF ZUserIn$ <> "=" THEN _
GOTO 4618
CALL SkipLine (1)
------------------------[ KG051701 ]-------------------------
Problem: When in a subboard, do a V)iew conference, and use
join suboption to rejoin main, stays inside the subboard.
Solution: Change RBBS-PC.BAS as follows:
1205 IF ZSubParm < 0 THEN _
GOTO 202
ZSubParm = 1
ZStopInterrupts = ZFalse
ZNonStop = (ZPageLength < 1)
ZWasQ = 0
IF ConfMailJoin OR (ZHomeConf$ <> "" AND ZHomeConf$ <> "MAIN") THEN _ ' TC051701
TurboLogon = (NOT ConfMailJoin) : _
ConfMailJoin = ZFalse : _
ZFF = 8 : _
ZUserIn$(2) = ZHomeConf$ : _
ZHomeConf$ = "" : _
ZWasQ = 1 : _
ZAnsIndex = 1 : _
ZLastIndex = 2 : _
ZStoreParseAt = 1 : _
ZLastCommand$ = "MJ" : _ ' KG021502
GOTO 1240
CALL SkipLine (1)
------------------------[ KG051601 ]-------------------------
Problem: When SysOp declines to leave a comment because it would
be to same person msg would be from, and then E)nters another
message, is not prompted for the subject ("comment" is used).
Change RBBS-PC.BAS as follows:
2000 QuotedReply = ZFalse
MsgFrom$ = ZActiveUserName$
SysopMsg = ZFalse ' MB051601
------------------------[ KG051501 ]-------------------------
Problem: Some BBS's allow lower case in a msg subject. When mail from
them gets added to RBBS, it may remain in lower case. Then thread
and text search will not match properly.
Solution: Always make the subject upper case when it is read into
RBBS. Change RBBS-PC.BAS as follows:
8040 IF LEN(MsgTo$) < 23 THEN _
MsgTo$ = MsgTo$ + _
SPACE$(23 - LEN(MsgTo$))
Subject$ = MID$(ZMsgRec$,76,25)
CALL Trim (Subject$)
CALL AllCaps (Subject$) ' KG051501
OrigSubject$ = Subject$
IF ZPswdFailed THEN _
Subject$ = WasSJ$
------------------------[ KG042501 ]-------------------------
Problem: When execute macros with block print to screen that
has empty lines in it, prompts repeated on the screen and macro
works irregulary.
Solution: Change RBBSSUB5.BAS as follows:
63336 GOSUB 63395
IF NOT ZMacroActive THEN _
ZMacroEcho = ZTrue : _
EXIT SUB ' KG042501
IF CompareVar > 0 THEN _
IF NOT CaseExecute THEN _
IF LEFT$(ZOutTxt$,3) = ZSmartTextCode$+"==" THEN _
WasX$ = RIGHT$(ZOutTxt$,LEN(ZOutTxt$)-3) : _ ' KG042501
GOTO 63370 _
ELSE IF LEFT$(ZOutTxt$,7) = ZSmartTextCode$ + "END ON" THEN _
CompareVar = 0 : _
GOTO 63336 _
ELSE GOTO 63336
IF LEN(ZOutTxt$) < 3 THEN _ ' KG042501
GOTO 63398 ' KG042501
WasX$ = RIGHT$(ZOutTxt$,LEN(ZOutTxt$)-3) ' KG042501
IF LEFT$(ZOutTxt$,1) <> ZSmartTextCode$ THEN _
GOTO 63398
CALL CheckInt (MID$(ZOutTxt$,2))
IF ZErrCode > 0 THEN _
GOTO 63398
.
.
.
------------------------[ KG041702 ]-------------------------
Problem: CONFIG accepts a quote for a command symbol but this
choice messes up the entire configuration file.
Solution: Do not allow quote as a choice. Change CNFG-SUB.BAS
as follows:
61892 CALL ASKRO("New command for " + _
MID$(COMMANDS$(FF,1),1,INSTR(COMMANDS$(FF,1)," ")) + _
"is?",24,HK$)
IF HK$ = CHR$(34) THEN _ ' KG041702
GOTO 61892 ' KG041702
X$ = MID$(HK$,1,1)
CALL ALLCAPS (X$)
IF LEN(HK$) > 1 THEN _
HK$ = X$ + MID$(HK$,2)
IF LEN (HK$) = 1 THEN _
HK$ = X$
COMMANDS$(FF,2) = HK$
MID$(SECTION.COMMANDS$,FF,1) = HK$
GOTO 61880
------------------------[ KG041701 ]-------------------------
Problem: Door may exist but fail to be executed.
Solution: Line was left out of a subprogram. Change RBBSSUB4.BAS
as follows:
59510 ZFileName$ = CurMenu$
InMenu = ZTrue ' KG041701
CALL BreakFileName (CurMenu$,MenuDrv$,WasX$,ZWasDF$,ZTrue)
MenuFront$ = MenuDrv$ + WasX$
CALL Graphic (GRDefault$,ZFileName$)
CurMenuVer$ = ZFileName$
ZStopInterrupts = ZFalse
IF ZAnsIndex < ZLastIndex OR ZExpertUser THEN _
GOTO 59520
------------------------[ KG041401 ]-------------------------
Problem: Possible to get an infinite loop under NetBios.
Solution: Caused by trying to unlock a file not locked. Change
RBBSSUB1.BAS as follows:
29920 ZErrCode = 0
IF IBMFileLock = 6 AND IBMRecLock = 3 THEN _
IBMCount = IBMCount - 1 : _
IF IBMCount > 0 THEN _
EXIT SUB _
ELSE IBMCount = 0
UNLOCK IBMFileLock, IBMRecLock TO IBMRecLock
IF ZErrCode = 70 THEN _ ' ML041401
EXIT SUB ' ML041401
IF ZErrCode <> 0 THEN _
GOTO 29920
END SUB
------------------------[ KG040902 ]-------------------------
Problem: When dooring to external protocols that append to the
log file used by DSZ, the log file can grow rather than contain
only the latest transfer, causing RBBS to read the wrong entry.
Solution: Change RBBSSUB5.BAS as follows:
20263 IF ZPrivateDoor THEN _
ZCmdTransfer$ = ZWasFT$ : _
CALL XferType (2,ZTrue) : _
ZCmdTransfer$ = ""
CALL OpenWork (2,"XFER-" + ZNodeID$ + ".DEF")
IF ZErrCode <> 0 THEN _
GOTO 20267
CALL ReadParms (ZWorkAra$(), ZFailureParm, 1)
IF ZErrCode <> 0 THEN _
GOTO 20267
CLOSE 2 ' KG040902
CALL KillWork ("XFER-" + ZNodeID$ + ".DEF")
------------------------[ KG040901 ]-------------------------
Problem: If screen happens to fill with msg "Scanning directory...",
will not pause but scroll lines away.
Solution: Change RBBSSUB5.BAS as follows:
20120 ZOutTxt$ = "Scanning Directory " + _
ZFileNameHold$
IF WasRS$ <> "" THEN _
ZOutTxt$ = ZOutTxt$ + " for " + WasRS$
GOSUB 21650
IF ZFileSysParm > 1 THEN _
RETURN
CALL AskMore ("",ZTrue,ZTrue,ZAnsIndex,ZFalse) ' KG040901
IF ZNo THEN _ ' KG040901
ZErrCode = 0 : _ ' KG040901
RETURN ' KG040901
WasPG = ZTrue
------------------------[ KG032801 ]-------------------------
Problem: Documentation says a macro can be executed before any
file transfer by putting it in PROTO.DEF. But macro is ignored.
Solution: Change RBBSSUB5.BAS as follows:
20330 IF ZAutoDownInProgress THEN _
RETURN
GOSUB 20337 ' KG032801
ZOutTxt$ = ZProtoPrompt$ + _
" " + WasA1$ + _
" of " + _
ZFileNameHold$ + _
" ready. <Ctrl X> aborts"
GOSUB 21650
20337 IF ZProtoMacro$ <> "" THEN _ ' KG032801
ZGSRAra$(1) = MID$("DU ",ZTransferFunction,1) : _ ' KG032801
CALL MacroExe (ZProtoMacro$) ' KG032801
RETURN ' KG032801
20340 IF ZWasDF THEN _
ZOutTxt$ = "Switch to a non-ascii protocol" : _
GOSUB 21650 : _
GOTO 21700
GOSUB 20750
IF ZFileSysParm > 1 OR NOT ZOK THEN _
RETURN
CALL OpenWork (2,ZFileName$)
IF (ZAnsIndex = FirstDnld OR NOT ZConcatFIles) THEN _
GOSUB 20337 : _ ' KG032801
ZOutTxt$ = "^X aborts. ^S suspends ^Q resumes" : _
GOSUB 21640 : _
IF ZFileSysParm > 1 THEN _
RETURN _
ELSE ZOutTxt$ = ZProtoPrompt$ + " SEND of " + _
ZFileNameHold$ + _
" ready. Press Any Key to start" : _
ZTurboKey = 2 : _
ZForceKeyboard = ZTrue : _
ZSuspendAutologoff = ZTrue : _
GOSUB 21660 : _
ZSuspendAutologoff = ZFalse : _
GOSUB 20335 : _
IF ZFileSysParm > 1 THEN _
RETURN
20560 LineACK = (ZDefaultLineACK$ <> "")
IF LineACK THEN _
ZOutTxt$ = "Acknowledge each line ([Y],N)" : _
ZTurboKey = - ZTurboKeyUser : _
LineACK = NOT ZNo : _
GOSUB 21660 : _
IF ZFileSysParm > 1 THEN _
RETURN
GOSUB 20337 ' KG032801
CALL QuickTPut1 ("Transfer MUST end with a <Ctrl-K>")
CALL QuickTPut1 (ZProtoPrompt$+" RECEIVE of " + ZFileNameHold$ + " ready")
ZOK = ZFalse
XOff = ZFalse
CALL OpenOutW(ZFileName$)
IF ZErrCode <> 0 AND ZErrCode <> 53 THEN _
ZWasEL = 20560 : _
GOTO 21900
GOSUB 20510
IF ZFileSysParm > 1 THEN _
RETURN
------------------------[ KG032601 ]-------------------------
Problem: When have a problem reading TRASHCAN file other than
file not found, such as when TRASHCAN is a dos subdirectory,
will get untrapped errors when new user tries to log on.
Solution: Change RBBS-PC.BAS as follows:
12570 Found = ZFalse
CALL OpenWork (2,ZTrashcanFile$)
IF ZErrCode <> 0 THEN _ ' KG032601
ZErrCode = 0 : _ ' KG032601
RETURN ' KG032601
------------------------[ KG032502 ]-------------------------
Problem: Any door listed in DOORS.DEF should be executable if
caller has sufficient security. But only SysOp can executed
doors not listed on the menu.
Solution: To allow "hidden" doors, change RBBS-PC.BAS as
follows:
821 IF ZExitToDoors THEN _
IF ZTransferFunction = 3 THEN _
ZNewUser = ZTrue : _
TurboLogon = ZFalse : _
SameUser = ZFalse : _
ZTransferFunction = 0 : _
GOTO 832 _
ELSE GOTO 832
GOSUB 1241
IF (SubBoard AND (ZOrigMsgFile$ = ZActiveMessageFile$)) _
OR ((ZUserSecLevel > ZMaxRegSec) AND (NOT ZNewUser)) THEN _
GOTO 832
ZWasZ$ = ZRegProgram$
ZTransferFunction = 3
CALL DoorExit (ZFalse) ' KG032502
ZTransferFunction = 0
GOTO 832
1401 ZStackC = ZTrue
CALL SubMenu ("Which questionnaire(s), L)ist" + ZPressEnterExpert$, _
WasA1$,ZQuesPath$,".DEF","",ZUserGraphicDefault$,ZTrue,ZFalse,ZTrue,"",WasX) ' KG032502
IF ZWasQ = 0 THEN _
RETURN
IF ZSubParm = -1 THEN _
RETURN 10595
QuestHold$ = ZWasZ$
GOSUB 11520
CLOSE 2
CALL UpdtCalr (QuestHold$ + " questionnaire " + _
MID$("answeredaborted",1 - 8 * ZQuestAborted,8),2)
IF ReturnToPrompt THEN _
RETURN
GOTO 1401
5301 ZStackC = ZTrue
CALL SubMenu ("What conference, L)ist, M)ain ([ENTER] quits)",_
WasA1$,MsgDrvPath$,_
"M.DEF","M",ZUserGraphicDefault$,ZTrue,ZFalse,ZFalse,"C.DEF",WasX) ' KG032502
IF ZWasQ = 0 THEN _
RETURN
IF ZSubParm = -1 THEN _
RETURN 10595
9701 CALL SubMenu ("Read what bulletin(s), L)ist, S)ince, N)ews ([ENTER] = none)",_
WasA1$, ZBulletinPrefix$,"",ReturnOn$,_
ZUserGraphicDefault$,ZFalse,ZFalse,ZFalse,"",WasX) ' KG032502
IF ZWasQ = 0 THEN _
RETURN
CALL CheckCarrier
IF ZSubParm = -1 THEN _
RETURN 10595
IF (ZWasZ$ = "*" OR ZWasZ$ = "S") THEN _
ZPrevPrefix$ = "" : _
GOTO 9760
ZStopInterrupts = ZFalse
IF ZWasZ$ = "N" THEN _
GOSUB 1242 : _
IF WasZ <> 0 THEN _
CALL QuickTPut1 ("No NEWS available") : _
GOTO 9701 _
ELSE GOTO 9703
CALL BufFile (ZFileName$,ZAnsIndex)
10974 WasA1$ = ZMenu$(5)
CALL Talk (5,ZOutTxt$)
ZStackC = ZTrue
CALL SubMenu ("Open which door, L)ist" + ZPressEnterExpert$, _
WasA1$,"",".BAT","",_
ZUserGraphicDefault$,ZTrue,ZFalse,ZFalse,"",InMenu) ' KG032502
IF ZWasQ = 0 THEN _
RETURN
IF ZSubParm = -1 THEN _
RETURN 10595
10986 ZWasZ$ = ZFileName$
CALL DoorExit (NOT InMenu) ' KG032502
GOTO 10974 ' KG032502
Change RBBSSUB2.BAS as follows:
(line 10983)
SUB DoorExit (ReqDoorsDef) STATIC ' KG032502
IF ZWasZ$ = "" OR _
ZWasZ$ = "NONE" THEN _
EXIT SUB
CALL FindIt (ZWasZ$)
IF NOT ZOK THEN _
GOTO 10986
CALL BreakFileName (ZWasZ$,WasX$,ExitTo$,ExitMethod$,ZFalse) ' KG032501
ExitMethod$ = ""
ZDooredTo$ = ExitTo$
CALL FindIt (ZDoorsDef$)
IF NOT ZOK THEN _
IF ReqDoorsDef THEN _ ' KG032502
EXIT SUB _ ' KG032502
ELSE ExitTo$ = ExitTo$ + " " + ZNodeID$ : _ ' KG032502
GOTO 10989 ' KG032502
10985 CALL ReadParms (ZOutTxt$(),8,1)
IF ZErrCode > 0 THEN _
IF ReqDoorsDef THEN _ ' KG032502
EXIT SUB _ ' KG032502
ELSE ExitTo$ = ExitTo$ + " " + ZNodeID$ : _ ' KG032502
GOTO 10989 ' KG032502
IF ExitTo$ <> ZOutTxt$(1) THEN _
GOTO 10985
CALL CheckInt (ZOutTxt$(2))
IF ZErrCode > 0 THEN _
ZErrCode = 0 : _
GOTO 10985
IF ZUserSecLevel < ZTestedIntValue THEN _
CALL QuickTPut1 ("Insufficient security for door") : _
EXIT SUB
WasX$ = LEFT$(ZOutTxt$(5),INSTR(ZOutTxt$(5)+" "," ")-1)
CALL FindIt (WasX$)
IF NOT ZOK THEN _
GOTO 10986
ZFileName$ = ZOutTxt$(3)
ExitMethod$ = ZOutTxt$(4)
ExitTemplate$ = ZOutTxt$(5)
ZDoorDisplay$ = ZOutTxt$(7)
DoorTime$ = ZOutTxt$(8)
CALL AskUsers
CALL SmartText (ExitTemplate$,ZFalse,ZFalse)
CALL MetaGSR (ExitTemplate$,ZFalse)
ExitTo$ = ExitTemplate$
GOTO 10989
Change RBBSSUB4.BAS as follows:
(line 59500)
SUB SubMenu (PassedPrompt$,CurMenu$,FrontOpt$, _
BackOpt$,ReturnOn$,GRDefault$,VerifyInMenu, _
AllMenuOK,RequireInMenu,BackOpt2$,InMenu) STATIC ' KG032502
59538 FilName$ = FPre$ + ZWasZ$
CALL BadFile (FilName$,WasBF)
IF WasBF > 1 THEN _
ZOK = ZFalse : _
RETURN
ZFileName$ = FilName$ + _
BackOpt$
CALL Graphic (GRDefault$,ZFileName$)
IF NOT ZOK THEN _
IF BackOpt2$ <> "" THEN _
ZFileName$ = FilName$ + _
BackOpt2$ : _
CALL Graphic (GRDefault$,ZFileName$)
IF ZOK THEN _
IF ZSysop OR (NOT RequireInMenu) THEN _
RETURN _
ELSE CALL WordInFile (CurMenu$,ZWasZ$,InMenu) : _ ' KG032502
IF InMenu THEN _ ' KG032502
RETURN _
ELSE GOTO 59540
IF (NOT VerifyInMenu) THEN _
GOTO 59540
CALL WordInFile (CurMenu$,ZWasZ$,InMenu) 'verify against menu itself ' KG032502
IF InMenu THEN _ ' KG032502
IF AllMenuOK THEN _
RETURN
59540 WasX$ = FPre$ + _
ZWasZ$ + _
".MNU" 'check whether option is a menu
ZFileName$ = WasX$
CALL Graphic (GRDefault$,ZFileName$)
IF ZOK THEN _
NewMenu = ZTrue : _
CurMenuVer$ = ZFileName$ : _
CurMenu$ = WasX$ : _
CALL BreakFileName (CurMenu$,MenuDrv$,WasX$,ZWasDF$,ZTrue) : _
MenuFront$ = MenuDrv$ + WasX$ : _
RETURN
IF VerifyInMenu AND InMenu AND NOT RequireInMenu THEN _ ' KG032502
CALL UpdtCalr("Option " + ZWasZ$ + " on menu " + _
CurMenu$ + " but not found",1)
RETURN
------------------------[ KG032501 ]-------------------------
Problem: When put registration door control in DOORS.DEF, it
is being ignored.
Solution: Change RBBSSUB2.BAS as follows:
(line 10983)
SUB DoorExit STATIC
IF ZWasZ$ = "" OR _
ZWasZ$ = "NONE" THEN _
EXIT SUB
CALL FindIt (ZWasZ$)
IF NOT ZOK THEN _
GOTO 10986
CALL BreakFileName (ZWasZ$,WasX$,ExitTo$,ExitMethod$,ZFalse) ' KG032501
ExitMethod$ = ""
.
.
.
------------------------[ KG031801 ]-------------------------
Problem: When has main and auxiliary FMS directories, and list an
auxiliary, abort, then list main, get auxiliary instead.
Solution: Change RBBSSUB3.BAS as follows:
58183 CLOSE 2
ZNonStop = (ZPageLength < 1)
ZStopInterrupts = ZFalse
ZOutTxt$ = ""
ZActiveFMSDir$ = "" ' KG031801
ZJumpSupported = ZFalse
EXIT SUB
------------------------[ KG031501 ]-------------------------
Problem: Sometimes get endless looping where keeps trying to download
same file after upload is aborted.
Solution: Change RBBSSUB5.BAS as follows:
20735 CALL KillWork (ZFileName$)
IF ZErrCode <>0 THEN _
ZWasEL = 20736 : _
GOTO 21900
ZAnsIndex = ZLastIndex + 1 ' KG031501
ZLastIndex = 0
RETURN
------------------------[ KK030901 ]-------------------------
Problem: Possible to get untrapped overflow error in intermediate
variables in an integer calculation.
Solution: Change RBBS-PC.BAS as follows:
135 IF ZCurDef$ = ZOrigCnfg$ THEN _
ZActiveMessageFile$ = ZMainMsgFile$ : _
ZActiveUserFile$ = ZMainUserFile$
GOSUB 4910
IF ZConfMode THEN _
GOTO 150
ZLocalUserMode = (RIGHT$(ZComPort$,1) < "1")
GET 1,ZNodeRecIndex
ZWasY$ = MID$(ZMsgRec$,77,2)
CALL UnPackDate (ZWasY$,WasX,WasL,WasI,ZOldDate$)
ZOldDate$ = LEFT$(ZOldDate$,6) + MID$(STR$(WasX),2)
ZHourMinToDropToDos = - (ZHourMinToDropToDos > 0) * ZHourMinToDropToDos
Hour = INT(ZHourMinToDropToDos / 100)
WasMN = ZHourMinToDropToDos - Hour * 100
ZTimeToDropToDos! = Hour * 3600! + WasMN * 60! ' KK030901
175 GOSUB 5344
CALL CountLines (MaxEntries)
REDIM ZCategoryName$(MaxEntries),ZCategoryCode$(MaxEntries),_
ZCategoryDesc$(MaxEntries) : _
CALL InitFMS (ZCategoryName$(),ZCategoryCode$(), _
ZCategoryDesc$(),ZNumCategories)
ZMaxMsgLines = ZMaxMsgLinesDef
ZLocalUser = (ZLocalUser OR ZLocalUserMode)
IF (NOT ZLocalUser) AND (NOT SubBoard) THEN _
CALL OpenCom (ZModemInitBaud$,",N,8,1")
IF NOT SubBoard THEN _
CALL SetEcho (ZDefaultEchoer$)
ZNodeWorkFile$ = ZNodeWorkDrvPath$ + _
"NODE" + _
ZNodeFileID$ + _
"WRK"
ZSecsPerSession! = ZMinsPerSession * 60! ' KK030901
IF NOT ZLocalUserMode THEN _
IF NOT ZExitToDoors THEN _
GOTO 180 _
ELSE IF NOT ZLocalUser THEN _
GOTO 180
ZLocalUser = ZTrue
ZBPS = -6
ZBaudTest! = 9600
ZEightBit = ZTrue
ZSnoop = ZTrue
IF ZExitToDoors THEN _
CALL AMorPM : _
CALL ReadProf : _
GOTO 410
GOSUB 178
GOTO 345
459 GOSUB 9500
ZLastDateTimeOnSave$ = ZLastDateTimeOn$
IF ZExitToDoors THEN _
TempHoldTime! = VAL(LEFT$(ZTime$,2))*3600! + _ ' KK030901
VAL(MID$(ZTime$,4,2))*60! : _ ' KK030901
CALL CheckTime(TempHoldTime!, TempTime!, 2) : _
MinsInDoors = TempTime! / 60 : _
CALL TimeRemain (MinsRemaining)
ZUserFileIndex = LOC(5)
GOSUB 5135
'
' *** COMPUTE THE NUMBER OF DAYS REMAINING UNTIL REGISTRATION EXPIRES **
'
IF ZRestrictByDate AND ZDaysInRegPeriod > 0 THEN _
CALL CompDate (UserRegYY,UserRegMM,UserRegDD,UserComputeDate!) : _
ZRegDaysRemaining = UserComputeDate! + _
ZDaysInRegPeriod - _
TodayComputeDate! : _
CALL ExpireDate (UserComputeDate!,ZDaysInRegPeriod,ZExpirationDate$) _
ELSE ZDaysInRegPeriod = 0
IF NOT ZPrivateDoor THEN _
IF ZRegDaysRemaining < 0 AND ZDaysInRegPeriod > 0 THEN _
IF ZUserSecLevel > ZExpiredSec THEN _
CALL QuickTPut1 (ZWasLG$(9) + _
" - security reset to " + _
STR$(ZExpiredSec)) : _
CALL BufFile(ZHelpPath$+"RGXPIRD"+ZHelpExtension$,WasX) : _
ZLogonErrorIndex = 9 : _
ZUserSecLevel = ZExpiredSec : _
LSET ZSecLevel$ = MKI$(ZUserSecLevel) : _
GOSUB 5135
Change RBBSSUB3.BAS as follows:
(line 44000)
SUB ReadProf STATIC
FIELD 1, 128 AS ZMsgRec$
GET 1,ZNodeRecIndex
ZReliableMode = VAL(MID$(ZMsgRec$,91,2))
MID$(ZMsgRec$,40,2) = "00"
ZEightBit = VAL(MID$(ZMsgRec$,42,2))
ZBPS = VAL(MID$(ZMsgRec$,44,2))
CALL CommInfo
ZBaudTest! = VAL(MID$(ZBaudRates$,(-5 * ZBPS),5))
ZUpperCase = VAL(MID$(ZMsgRec$,46,2))
ZNumDnldBytes! = CVS(MID$(ZMsgRec$,48,4)) ' KG022101
ZBatchTransfer = (MID$(ZMsgRec$,52,1) = "1")
ZWasGR = VAL(MID$(ZMsgRec$,53,2))
HourLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,65,1))),2),2)
MinLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,66,1))),2),2)
SecLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,67,1))),2),2)
ZTimeLoggedOn$ = HourLoggedOn$ + _
":" + _
MinLoggedOn$ + _
":" + _
SecLoggedOn$
ZTransferFunction = VAL(MID$(ZMsgRec$,74,1))
ZWasFT$ = MID$(ZMsgRec$,75,1)
ZTimeCredits! = 60!*CVI(MID$(ZMsgRec$,113,2)) ' KKG030901
ZDooredTo$ = MID$(ZMsgRec$,79,8)
CALL Trim (ZDooredTo$)
.
.
.
44003 ZUserLogonTime! = VAL(HourLoggedOn$) * 3600! + _ ' KK030901
VAL(MinLoggedOn$) * 60! + _ ' KK030901
VAL(SecLoggedOn$)
HourLoggedOn$ = ""
MinLoggedOn$ = ""
SecLoggedOn$ = ""
IF ZMinsPerSession < 1 THEN _
ZMinsPerSession = 3
IF NOT ZEightBit THEN _
OUT ZLineCntlReg,&H1A
IF LEFT$(ZMsgRec$,7) = "SYSOP " THEN _
ZFirstName$ = ZSysopPswd1$ : _
ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ _
ELSE ZFirstNameEnd = INSTR(ZMsgRec$," ") : _
ZLastNameEnd = INSTR(ZFirstNameEnd + 1,ZMsgRec$ + " "," ") : _
ZFirstName$ = LEFT$(ZMsgRec$,ZFirstNameEnd-1) : _
ZLastName$ = MID$(ZMsgRec$,ZFirstNameEnd + 1,ZLastNameEnd - (ZFirstNameEnd + 1)) : _
ZActiveUserName$ = MID$(ZFirstName$ + " " + ZLastName$,1,31)
ZWasZ$ = ZFirstName$
CALL OpenWork (2,ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
CALL ReadDir (2,1)
ZLimitMinsPerSession = VAL (ZOutTxt$)
CLOSE 2
END SUB
(line 58140)
SUB LoadNew (Ara(2)) STATIC
IF ZFMSDirectory$ = "" THEN _
EXIT SUB
ZPrevBase$ = ""
IF PrevLoadNew$ = ZFMSDirectory$ THEN _
Ara(1,1) = 0 : _
EXIT SUB
PrevLoadNew$ = ZFMSDirectory$
CALL OpenFMS (LastRec)
FIELD 2, 23 AS PreDate$, _
2 AS WasMM$, _
1 AS Fill1$, _
2 AS WasDD$, _
1 AS Fill2$, _
2 AS Year$, _
(2 + ZMaxDescLen) AS Fill3$, _
3 AS Category$, _
2 AS Fill4$
MaxRecs = UBOUND(Ara,1)
IF MaxRecs < 1 THEN _
MaxRecs = 1 _
ELSE IF MaxRecs > 23 THEN _
MaxRecs = 23
WasL = 0
WasK = LastRec
WHILE WasK > 0 AND WasL < MaxRecs
GET #2,WasK
IF INSTR("\= ",LEFT$(PreDate$,1)) > 0 THEN _
GOTO 58142
IF (ZCanDnldFromUp OR Category$ <> ZDefaultCatCode$) THEN _
WasL = WasL + 1 : _
Ara(WasL,1) = 372! * (VAL(Year$) - 80!) + 31! * VAL(WasMM$) + VAL(WasDD$) ' KK030901
IF NOT ZCanDnldFromUp THEN _
WasX = ZMinSecToView _
ELSE IF Category$ = "***" THEN _
WasX = ZSysopSecLevel _
ELSE IF Category$ = ZDefaultCatCode$ THEN _
WasX = ZMinSecToView _
ELSE WasX = ZOptSec(19)
Ara(WasL,2) = WasX
------------------------[ KG030801 ]-------------------------
Problem: When screen pauses in midst of personal mail scan, will no
longer show rest of mail scan on the screen.
Solution: Change RBBS-PC.BAS as follows:
1900 GOSUB 5344
IF ZPrivateDoor THEN _
ActionFlag = ZTrue
ZPrevBase$ = ZActiveMessageFile$
ShowActive = ZFalse
IF NOT ActionFlag THEN _
CALL QuickTPut ("Checking messages in " + ConfFileName$,0) : _
ShowActive = ZTrue _
ELSE CALL QuickTPut ("Loading messages",0)
WasA1$ = "" ' KG030801
MsgCt = 0 ' KG030203
MsgsFromUser = ZFalse
ActiveMessages = 0
MailReported = ActionFlag
FirstOld = ZTrue
GOSUB 23000
MsgRec = FirstMsgRecord
MaxMsgs = VAL(MID$(ZMsgRec$,89,7))
IF MaxMsgs > WasMM THEN _
MaxMsgs = WasMM
REDIM ZMsgPtr(MaxMsgs,2)
NumDots = 0
1940 IF MsgsFromUser < ZMsgDim THEN _
MsgsFromUser = MsgsFromUser + 1 : _
WasA1$ = WasA1$ + LEFT$(ZMsgRec$,5) ' KG030801
1960 WasK = 1
FOR MsgCt = 1 TO MsgsFromUser ' KG030203
ZOutTxt$ = MID$(WasA1$,WasK,5) ' KG030801
WasK = WasK + 5
GOSUB 12978
IF MsgCt MOD 15 = 0 THEN _ ' KG030203
CALL SkipLine (1) : _ ' KG030203
CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) ' KG030203
NEXT
WasA1$ = "" ' KG030801
CALL SkipLine (1)
CALL QuickTPut1 ("Please K)ill old/unneeded msgs")
------------------------[ KG030601 ]-------------------------
Problem: Sometimes RBBS will get in a state where it constantly
recycles. Callers file says "Connect Timeout".
Solution: Caused usually by storing a telephone number in place of
where from, or by failing to give password right in local mode, then
bringing up remotely. Change RBBS-PC.BAS as follows:
150 IF SubBoard THEN _
GOSUB 12987 : _
GOSUB 5135 : _
GOTO 170
ZSysopAvail = VAL(MID$(ZMsgRec$,32,2))
ZSysopAnnoy = VAL(MID$(ZMsgRec$,34,2))
ZSysopNext = VAL(MID$(ZMsgRec$,36,2))
MID$(ZMsgRec$,36,2) = STR$(ZFalse)
ZPrinter = VAL(MID$(ZMsgRec$,38,2))
IF ZTurnPrinterOff THEN _
ZPrinter = ZFalse
ZExitToDoors = (MID$(ZMsgRec$,40,2) = "-1" AND ZNetBaud$ = "")
ZEightBit = VAL(MID$(ZMsgRec$,42,2))
ZBPS = VAL(MID$(ZMsgRec$,44,2))
ZSnoop = VAL(MID$(ZMsgRec$,58,2))
MID$(ZMsgRec$,57,1) = "I"
ZPrivateDoor = (MID$(ZMsgRec$,72,2) = "-1")
IF ZPrivateDoor THEN _
ZHasPrivDoor = ZTrue
MID$(ZMsgRec$,72,2) = STR$(ZFalse)
ZLocalUser = (MID$(ZMsgRec$,101,2) = ZCarriageReturn$+ZCarriageReturn$) ' KG030601
IF ZExitToDoors OR ZPrivateDoor THEN _
ZHasDoored = ZTrue : _
TurboLogon = ZTrue
PUT 1,ZNodeRecIndex
GOSUB 12985
'
' ***** INITIALIZE VOICE SYNTHESIZER ****
'
CALL Talk (Init,ZOutTxt$)
'
' ***** TEST FOR MULTI LINK PRESENT IF NOT COMPAQ COMPUTER ****
'
13555 ZActiveMessageFile$ = ZOrigMsgFile$
GOSUB 12986
GOSUB 5344
GET 1,ZNodeRecIndex
MID$(ZMsgRec$,57,1) = "I"
MID$(ZMsgRec$,40,2) = " 0"
MID$(ZMsgRec$,72,2) = " 0"
IF MID$(ZMsgRec$,101,2) = ZCarriageReturn$+ZCarriageReturn$ THEN _ ' KG030602
MID$(ZMsgRec$,101,2) = " 0" ' KG030602
PUT 1,ZNodeRecIndex
GOSUB 12985
CLOSE 1,2,4,5
IF NOT ZFossil THEN _
CLOSE 3
IF ZRecycleToDos THEN _
GOTO 203
RUN 100
Change RBBSSUB3.BAS as follows:
43070 ZActiveMessageFile$ = ZOrigMsgFile$
ZSubParm = 3
CALL FileLock
CALL OpenMsg
FIELD 1, 128 AS ZMsgRec$
GET 1,ZNodeRecIndex
IF ZGlobalSysop THEN _
MID$(ZMsgRec$,1,30) = "SYSOP" + SPACE$(25)
MID$(ZMsgRec$,40,2) = STR$(ZExitToDoors)
MID$(ZMsgRec$,42,2) = STR$(ZEightBit)
MID$(ZMsgRec$,44,2) = STR$(ZBPS)
MID$(ZMsgRec$,46,2) = STR$(ZUpperCase)
MID$(ZMsgRec$,48,5) = MKS$(ZNumDnldBytes!) + MID$(STR$(-ZBatchTransfer),2) ' KG022101
MID$(ZMsgRec$,53,2) = STR$(ZWasGR)
MID$(ZMsgRec$,55,2) = STR$(ZSysop)
MID$(ZMsgRec$,65,3) = CHR$(VAL(LEFT$(ZTimeLoggedOn$,2))) + _
CHR$(VAL(MID$(ZTimeLoggedOn$,4,2))) + _
CHR$(VAL(MID$(ZTimeLoggedOn$,7,2)))
MID$(ZMsgRec$,72,2) = STR$(ZPrivateDoor)
MID$(ZMsgRec$,74,1) = MID$(STR$(ZTransferFunction),2,1)
MID$(ZMsgRec$,75,1) = ZWasFT$
MID$(ZMsgRec$,113,2) = MKI$(CINT(ZTimeCredits!)/60)
MID$(ZMsgRec$,79,8) = LEFT$(ZDooredTo$+" ",8)
MID$(ZMsgRec$,91,2) = STR$(ZReliableMode)
CALL BreakFileName (ZCurPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZFalse)
MID$(ZMsgRec$,93,8) = ZUserIn$ + SPACE$(8 - LEN(ZUserIn$))
IF ZLocalUser THEN _
ZWasZ$ = ZCarriageReturn$ + ZCarriageReturn$ _ ' KG030601
ELSE ZWasZ$ = " 0" ' KG030601
MID$(ZMsgRec$,101,2) = ZWasZ$ ' KG030601
MID$(ZMsgRec$,103,2) = STR$(ZLocalUserMode) ' KG030601
ZConfName$ = LEFT$(ZConfName$,INSTR(ZConfName$ + " "," ") - 1)
MID$(ZMsgRec$,105,8) = ZConfName$ + SPACE$(8 - LEN(ZConfName$))
MID$(ZMsgRec$,115,1) = MID$(STR$(ZAutoLogoffReq),2,1)
MID$(ZMsgRec$,117,2) = STR$(ZMenuIndex)
MID$(ZMsgRec$,119,2) = LEFT$(DATE$,2)
MID$(ZMsgRec$,121,2) = MID$(DATE$,4,2)
MID$(ZMsgRec$,123,2) = RIGHT$(DATE$,2)
MID$(ZMsgRec$,125,2) = LEFT$(TIME$,2)
MID$(ZMsgRec$,127,2) = MID$(TIME$,4,2)
' *** Save additional parameters for door restoral
CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
CALL PrintWorkA (STR$(ZLimitMinsPerSession))
CLOSE 2
(line 44000)
SUB ReadProf STATIC
FIELD 1, 128 AS ZMsgRec$
GET 1,ZNodeRecIndex
ZReliableMode = VAL(MID$(ZMsgRec$,91,2))
MID$(ZMsgRec$,40,2) = "00"
ZEightBit = VAL(MID$(ZMsgRec$,42,2))
ZBPS = VAL(MID$(ZMsgRec$,44,2))
CALL CommInfo
ZBaudTest! = VAL(MID$(ZBaudRates$,(-5 * ZBPS),5))
ZUpperCase = VAL(MID$(ZMsgRec$,46,2))
ZNumDnldBytes! = CVS(MID$(ZMsgRec$,48,4)) ' KG022101
ZBatchTransfer = (MID$(ZMsgRec$,52,1) = "1")
ZWasGR = VAL(MID$(ZMsgRec$,53,2))
HourLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,65,1))),2),2)
MinLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,66,1))),2),2)
SecLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,67,1))),2),2)
ZTimeLoggedOn$ = HourLoggedOn$ + _
":" + _
MinLoggedOn$ + _
":" + _
SecLoggedOn$
ZTransferFunction = VAL(MID$(ZMsgRec$,74,1))
ZWasFT$ = MID$(ZMsgRec$,75,1)
ZTimeCredits! = 60*CVI(MID$(ZMsgRec$,113,2))
ZDooredTo$ = MID$(ZMsgRec$,79,8)
CALL Trim (ZDooredTo$)
IF ZExitToDoors AND ZDooredTo$ <> "" THEN _
CALL OpenWork (2,ZDoorsDef$) : _
IF ZErrCode = 0 THEN _
CALL ReadParms (ZOutTxt$(),8,1) : _
WHILE ZErrCode = 0 AND ZOutTxt$(1) <> ZDooredTo$ : _
CALL ReadParms (ZOutTxt$(),8,1) : _
WEND : _
IF ZOutTxt$(1) = ZDooredTo$ THEN _
ZDoorSkipsPswd = (ZOutTxt$(6) <> "Y") : _
CALL BufFile (ZOutTxt$(7),WasX)
ZErrCode = 0
ZMenuIndex = VAL(MID$(ZMsgRec$,117,2))
ZCurPUI$ = MID$(ZMsgRec$,93,8)
CALL Remove (ZCurPUI$," ")
IF ZCurPUI$ <> "" THEN _
CALL BreakFileName (ZMainPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZTrue) : _
ZCurPUI$ = ZOutTxt$ + ZCurPUI$ + ZWasZ$
ZCustomPUI = (ZCurPUI$ <> "")
ZLocalUser = (MID$(ZMsgRec$,101,2) = ZCarriageReturn$ + ZCarriageReturn$) ' KG030601
ZLocalUserMode = VAL(MID$(ZMsgRec$,103,2))
ZHomeConf$ = MID$(ZMsgRec$,105,8)
ZAutoLogoffReq = (VAL(MID$(ZMsgRec$,115,1)) <> 0)
CALL Trim (ZHomeConf$)
IF ZRequiredRings > 0 AND _
INSTR(ZModemInitCmd$,"S0=255") THEN _
COLOR 7,0,0 _
ELSE COLOR ZFG,ZBG,ZBorder
IF ZLocalUserMode THEN _
GOTO 44003
CALL SetBaud
------------------------[ KG030301 ]-------------------------
Problem: prompt for file displayed on security violation confusing
people because it wants only the file prefix and refuses to accept
extension or drive/path without making that clear.
Solution: Change CONFIG.BAS as follows:
17280 CALL ASKRO("Name of file shown for security breaches (prefix ONLY)",24,HJ$) ' KG030301
IF LEN(HJ$) > 8 OR INSTR(HJ$,".") > 0 THEN _
GOTO 17280
IF LEN(HJ$) < 1 THEN _
SECVIO.HLP$ = NONE.PICKED$ : _
RETURN
CALL ALLCAPS (HJ$)
SECVIO.HLP$ = HELP.PATH$ + HJ$ + "." + HELP.EXTENSION$
RETURN
------------------------[ KG030203 ]-------------------------
Problem: If caller happened to have many msgs, display of them in
msg scan may fail to pause when screen is full. Also, # of messages
listed on a line was inconsistent between new and old messages.
Solution: Change RBBS-PC.BAS as follows:
1900 GOSUB 5344
IF ZPrivateDoor THEN _
ActionFlag = ZTrue
ZPrevBase$ = ZActiveMessageFile$
ShowActive = ZFalse
IF NOT ActionFlag THEN _
CALL QuickTPut ("Checking messages in " + ConfFileName$,0) : _
ShowActive = ZTrue _
ELSE CALL QuickTPut ("Loading messages",0)
ZUserIn$ = ""
MsgCt = 0 ' KG030203
MsgsFromUser = ZFalse
ActiveMessages = 0
MailReported = ActionFlag
FirstOld = ZTrue
GOSUB 23000
MsgRec = FirstMsgRecord
MaxMsgs = VAL(MID$(ZMsgRec$,89,7))
IF MaxMsgs > WasMM THEN _
MaxMsgs = WasMM
REDIM ZMsgPtr(MaxMsgs,2)
NumDots = 0
1925 ZWasA = VAL(MID$(ZMsgRec$,2,4))
IF LogonMailNew THEN _
IF ZWasA <= ZLastMsgRead THEN _
GOTO 1935
IF NOT ShowActive THEN _
GOTO 1930
MailReported = ZTrue
FirstNew = (ZWasA > ZLastMsgRead)
IF FirstNew THEN _
MsgCt = 0 : _ ' KG030203
CALL SkipLine (1) : _
CALL QuickTPut1 ("NEW Mail for YOU (* = Private)") _
ELSE IF FirstOld THEN _
CALL SkipLine (1) : _
CALL QuickTPut1 ("OLD Mail for YOU (* = Private)") : _
FirstOld = ZFalse
ShowActive = NOT FirstNew
1930 CALL QuickTPut (LEFT$(ZMsgRec$,5),0)
MsgCt = MsgCt + 1 ' KG030203
IF MsgCt MOD 15 = 0 THEN _ ' KG030203
CALL SkipLine (1) : _ ' KG030203
CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) ' KG030203
1960 WasK = 1
FOR MsgCt = 1 TO MsgsFromUser ' KG030203
ZOutTxt$ = MID$(ZUserIn$,WasK,5)
WasK = WasK + 5
GOSUB 12978
IF MsgCt MOD 15 = 0 THEN _ ' KG030203
CALL SkipLine (1) : _ ' KG030203
CALL AskMore ("",ZTrue,ZTrue,WasX,ZTrue) ' KG030203
NEXT
ZUserIn$ = ""
CALL SkipLine (1)
CALL QuickTPut1 ("Please K)ill old/unneeded msgs")
------------------------[ KG030202 ]-------------------------
Problem: In personal download, when have color graphics on,
color of description spills over into prompt to download what.
Solution: Change RBBSSUB4.BAS as follows:
59303 CALL QuickTPut (ZEmphasizeOff$,0) ' KG030202
ZOutTxt$ = "Download what: L)ist, * = new, or file(s)" + _
ZPressEnterExpert$
ZMacroMin = 99
ZStackC = ZTrue
CALL PopCmdStack
IF ZSubParm = -1 OR ZWasQ = 0 THEN _
ZLastIndex = 0 : _
EXIT SUB
------------------------[ KG030201 ]-------------------------
Problem: When remote called does Xoff (Control-S), display of
a message does not pause until after display of full screen or
end of message.
Solution: Change RBBS-PC.BAS as follows:
9085 IF LEFT$(ZOutTxt$,1) = ZStartOfHeader$ OR _
LEFT$(ZOutTxt$,LEN(ZScreenOutMsg$)) = ZScreenOutMsg$ THEN _
GOTO 9050
ZOutTxt$(ZLinesInMsg) = ZOutTxt$
IF Bracketed THEN _
Bracketed = ZFalse : _
HiLitedLine = ZLinesInMsg
ZLinesInMsg = ZLinesInMsg + 1
IF ZLinesInMsg > MsgDimXtra THEN _
ZLinesInMsg = ZLinesInMsg - 1 : _
CALL SkipLine (1) : _
CALL QuickTPut1 ("Message too long. Truncated to " + STR$(MsgDimXtra) + " lines!") : _
ZOutTxt$ = "" : _
RETURN
IF NOT DontPrint THEN _ ' KG030201
GOSUB 12979 : _ ' KG030201
IF ZRet THEN _
ZOutTxt$ = "" : _
RETURN _ ' KG030201
ELSE CALL AskMore ("",ZTrue,ZTrue,ZAnsIndex,ZFalse) : _ ' KG030201
IF ZNo THEN _ ' KG030201
DontPrint = ZTrue ' KG030201
GOTO 9050
------------------------[ KG030101 ]-------------------------
Problem: When having mail waiting in current confernce, and
read all the new mail, and then do a V)iew conference, the
mail waiting flag is still shown as on in the current conference.
Solution: Change RBBSSUB4.BAS as follows:
59852 IF EOF(2) OR NOT ZOK THEN _
GOTO 59854
CALL ReadAny
ZActiveUserFile$ = ZOutTxt$
CALL ReadAny
IF ZErrCode > 0 THEN _
GOTO 59854
ZActiveMessageFile$ = ZOutTxt$
CALL FindFile (ZActiveUserFile$,ZOK)
IF NOT ZOK THEN _
GOTO 59854
CALL OpenUser (HighestUserRecord)
FIELD 5, 128 AS ZUserRecord$
CALL FindFile (ZActiveMessageFile$,ZOK)
IF NOT ZOK THEN _
GOTO 59854
CALL FindUser (ZOrigUserName$,"",ZStartHash,ZLenHash,_
0,0,HighestUserRecord,_
Found,HoldUserFileIndex,ZWasSL)
IF NOT Found THEN _
GOTO 59852
CALL OpenMsg
FIELD 1, 128 AS ZMsgRec$
GET 1,1
AnyMail = ZTrue
WasX = CVI(MID$(ZUserRecord$,57,2))
WasX = (WasX AND 512) > 0
CALL BreakFileName (ZActiveUserFile$,WasX$,CurPre$,CurExt$,ZFalse)
InCur = (CurPre$ = NowInPre$ AND CurExt$ = NowInExt$)
IF InCur THEN _
WasX = ZMailWaiting : _ ' KG030101
ZWasA = ZLastMsgRead _
ELSE ZWasA = CVI(MID$(ZUserRecord$,51,2))
.
.
.
------------------------[ KG022702 ]-------------------------
Problem: When using LIT version with message import off
(MIMPORT OFF), get untrapped errors when message margin of
user set lower than that used by the message.
Solution: Use new MIMPORT.LIT.
------------------------[ KG022701 ]-------------------------
Problem: Command stacking not always working right in msg
read. E.g. "j xxx r test" will look for messages with text "r".
Solution: Change RBBS-PC.BAS as follows:
4330 QuickScanMsgs = ZFalse
ReadMsgs = ZTrue
HiLiteRec = -1
ScanMsgs = ZFalse
MsgStart = 6
MsgEnd = 100
IF ZLocalUserMode OR NOT ZLocalUser THEN _
IF ReadMsgIn$ <> ZActiveMessageFile$ THEN _
ReadMsgIn$ = ZActiveMessageFile$ : _
CALL UpdtCalr ("Read Messages in " + ReadMsgIn$,1)
GOSUB 1300
GOTO 4350 ' KG022701
4360 ZWasLG$(11) = ZWasZ$
NumMsgsSelected = ZLastIndex
MsgIndex = ZAnsIndex ' KG022701
ZLastIndex = 0
ToRequested = ZFalse
FromRequested = ZFalse
IF ZPageLength < 1 THEN _
ZNonStop = ZTrue
4370 MsgIndex = MsgIndex + 1 ' KG022701
4371 IF MsgIndex <= NumMsgsSelected THEN _ ' KG022701
IF LEN(ZUserIn$(ZAnsIndex)) = 1 AND _
INSTR("Cc",ZUserIn$(MsgIndex)) > 0 THEN _ ' KG022701
GOTO 4370 _
ELSE _
CALL CheckInt (ZUserIn$(MsgIndex)) : _ ' KG022701
IF ZErrCode <> 0 THEN _
ZWasEL = 4371 : _
GOTO 13000 _
ELSE CurMsg = ZTestedIntValue : _
ZAnsIndex = MsgIndex : _ ' KG022701
GOTO 4415
4400 GOSUB 12932 ' KG022701
IF ZWasQ = 0 THEN _
RETURN
4402 IF LEN(ZUserIn$(ZAnsIndex)) = 1 THEN _ ' KG022701
IF INSTR("Qq",ZUserIn$) THEN _
RETURN _
ELSE IF INSTR("Hh",LEFT$(ZUserIn$(ZAnsIndex),1)) THEN _ ' KG022701
ZFileName$ = ZHelpPath$ + "MR" + ZHelpExtension$ : _
GOSUB 1790 : _
GOTO 4390
MsgIndex = 0 ' KG022701
NumMsgsSelected = ZWasQ
GOTO 4370
4416 IF INSTR("Mm",ZUserIn$(ZAnsIndex)) THEN _
AddressedToUser = ZTrue : _
GOTO 4370
ZWasA = INSTR("FfTt",ZUserIn$(ZAnsIndex))
IF ZWasA > 0 THEN _
ToRequested = (ZWasA > 2) : _
FromRequested = (ZWasA < 3) : _
GOTO 4370
IF CurMsg = 0 THEN _
IF SearchHeader$ <> "" THEN _
GOTO 4370 _
ELSE SearchString$ = ZUserIn$(ZAnsIndex) : _ ' KG022701
CALL AllCaps (SearchString$) : _
CALL Remove (SearchString$,CHR$(34) + CHR$(39)) : _
SearchHeader$ = SearchString$ : _
SubInHeader$ = SearchHeader$ : _
GOTO 4370
CALL SkipLine (1)
------------------------[ RH022501 ]-------------------------
Problem: in autodownload, the name displayed to the user is wrong
when default extension is added by rbbs.
Change RBBS-PC.BAS as follows:
20247 ZWasDF = 0
CALL BreakFileName (ZFileName$,DR$,WasX$,Extension$,ZFalse)
IF ZAutoDownInProgress THEN _
ZUserIn$(ZAnsIndex) = WasX$ + "." + Extension$ : _ ' RH022501
ZOutTxt$ = "Transferring -- " + _
ZUserIn$(ZAnsIndex) : _ ' RH022501
GOSUB 21640 : _
IF ZFileSysParm > 1 THEN _
RETURN
IF INSTR("...WRK.FW .ARC.EXE.COM.OBJ.WKS.LBR.ZIP.PAK.ZOO.LZH.","."+Extension$+".") > 2 OR _
MID$(Extension$,2,1) = "Q" OR _
(ZRequireNonASCII AND Extension$ = "BAS") THEN _
ZWasDF = ZTrue
------------------------[ KG022301 ]-------------------------
Problem: no way to trigger macro processing for on-line files.
Either not found or macro. Now can have both.
Solution: Add the following variable to RBBS-VAR.BAS: ZFileLocations$
Change RBBSSUB4.BAS as follows:
(line 58700)
SUB RotorsDir (FilName$,SDirAra$(1),MaxSearch,MarkingTime,PassToMacro$) STATIC ' KG022204
ZOK = ZFalse
ZDotFlag = ZFalse
IF MarkingTime THEN _
CALL QuickTPut ("Searching for "+FilName$,0)
IF ZMenuIndex = 6 THEN _
GOTO 58705
NumSearch = 1
WasX = 0
WHILE (NOT ZOK) AND NumSearch <= MaxSearch AND _
SDirAra$(NumSearch) <> ""
IF MarkingTime THEN _
CALL MarkTime (WasX)
WasX$ = SDirAra$(NumSearch) + _
FilName$
CALL FindFile (WasX$,ZOK)
NumSearch = NumSearch + 1
WEND
IF ZOK OR NOT ZFastFileSearch THEN _ ' KG022301
GOTO 58710 ' KG022301
CALL OpenRSeq (ZFastFileList$,HighRec,WasX,18) ' KG022301
IF ZErrCode <> 0 THEN _ ' KG022301
GOTO 58710 ' KG022301
CALL TrimTrail (FilName$,".")
CALL BinSearch (FilName$,1,12,18,HighRec,RecFoundAt, RecFound$)
ZOK = (RecFoundAt > 0)
IF NOT ZOK THEN _ ' KG022301
GOTO 58710 ' KG022301
ZOK = ZFalse
CALL CheckInt (MID$(RecFound$,13,4))
IF ZTestedIntValue < 1 THEN _ ' KG022301
GOTO 58710 ' KG022301
CALL OpenRSeq (ZFastFileLocator$,HighRec,WasX,66)
IF ZErrCode <> 0 OR ZTestedIntValue > HighRec THEN _ ' KG022301
GOTO 58710 ' KG022301
FIELD 2, 66 AS LocatorRec$
GET 2, ZTestedIntValue
WasX$ = LEFT$(LocatorRec$,63)
CALL Trim (WasX$)
IF LEFT$(WasX$,2) = "M!" THEN _
ZOK = ZFalse : _ ' KG022301
ZGSRAra$(1) = PassToMacro$ : _ ' KG022204
WasX$ = RIGHT$(WasX$,LEN(WasX$)-2) : _ ' KG022204
CALL Trim (WasX$) : _ ' KG022204
ZFileLocation$ = "" : _ ' KG022301
CALL MacroExe (WasX$) : _ ' KG022204
IF ZFileLocation$ = "" THEN _ ' KG022301
ZOK = ZFalse : _ ' KG022204
GOTO 58711 _ ' KG022301
ELSE WasX$ = ZFileLocation$ ' KG022301
WasX$ = WasX$ + FilName$ ' KG022301
CALL FindFile (WasX$,ZOK) ' KG022301
GOTO 58710 ' KG022301
Change RBBSSUB5.BAS as follows:
63336 GOSUB 63395
IF NOT ZMacroActive THEN _
ZMacroEcho = ZTrue : _
EXIT SUB
IF LEN(ZOutTxt$) < 3 THEN _
GOTO 63398
WasX$ = RIGHT$(ZOutTxt$,LEN(ZOutTxt$)-3)
IF CompareVar > 0 THEN _
IF NOT CaseExecute THEN _
IF LEFT$(ZOutTxt$,3) = ZSmartTextCode$+"==" THEN _
GOTO 63370 _
ELSE IF LEFT$(ZOutTxt$,7) = ZSmartTextCode$ + "END ON" THEN _
CompareVar = 0 : _
GOTO 63336 _
ELSE GOTO 63336
IF LEFT$(ZOutTxt$,1) <> ZSmartTextCode$ THEN _
GOTO 63398
CALL CheckInt (MID$(ZOutTxt$,2))
IF ZErrCode > 0 THEN _
GOTO 63398
IF ZTestedIntValue > 0 AND ZTestedIntValue <= ZMaxWorkVar THEN _
ZOutTxt$ = WasX$ : _ ' Macro command ask
ZForceKeyboard = ZTrue : _
ZMacroSave = ZTestedIntValue : _
ZLinesPrinted = 1 : _
ZNonStop = (ZPageLength < 1) : _
EXIT SUB
ON (1+INSTR("*0*1*B*FWT>>STON==M!M@EYEN/*TK<<:=LVNVCVLO",MID$(ZOutTxt$,2,2)))\2 GOTO _ ' KG022301
63345, _ ' Display with no Carriage Return
63347, _ ' Display with Carriage Return
63340, _ ' Display Block
63348, _ ' Display File
63343, _ ' Wait # of seconds
63350, _ ' Append to file
63355, _ ' Stack
63360, _ ' Case
63370, _ ' Case Comparison
63375, _ ' Macro execute
63380, _ ' Macro Abort
63383, _ ' Macro Echo on
63385, _ ' Macro Echo off
63336, _ ' Macro Comment
63387, _ ' Turbo Key allowed
63390, _ ' Form read
63362, _ ' Assign value to work var
63363, _ ' LV list verify
63364, _ ' NV number verify
63364, _ ' CV character verify ' KG022301
63367 ' LO assign file location ' KG022301
GOTO 63398
63367 CALL TRIM (WasX$) ' KG022301
ZFileLocation$ = WasX$ ' KG022301
GOTO 63336 ' KG022301
------------------------[ KG022205 ]-------------------------
Problem: In arc view, if file invokes macro processing, the file
name was no longer correct when came back and reported file not
found.
20143 ZWasZ$ = ZUserIn$(ZAnsIndex)
WasZ$ = ZWasZ$ ' KG022205
CALL AllCaps (ZWasZ$)
CALL BreakFileName (ZWasZ$,Drive$,Prefix$,Ext$,ZFalse)
IF Ext$ = "" THEN _
Ext$ = ZDefaultExtension$ : _
ZWasZ$ = ZWasZ$ + "." + ZDefaultExtension$
ZFileNameHold$ = ZWasZ$
ZFileName$ = ZWasZ$
CALL BadFile (Prefix$,BadFileNameIndex)
ON BadFileNameIndex GOTO 20144,20146,20147
20146 ZWasZ$ = WasZ$ + _ ' KG022205
" not found!"
CALL UpdtCalr (ZWasZ$,2)
ZOutTxt$ = ZWasZ$ + _
" Type correct filename" + ZPressEnterExpert$
ZSubParm = 1
CALL TGet
IF ZSubParm = -1 OR ZWasQ = 0 THEN _
RETURN
ZUserIn$(ZAnsIndex) = ZUserIn$(1)
GOTO 20143
------------------------[ KG022204 ]-------------------------
Problem: SysOps off-line files might want to process differently
when get an upload, view, or download rather than execute macro
only on download.
Solution: pass D, V, or U to macro in first work variable so
can alter processing.
Change RBBSSUB2.BAS as follows:
20145 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount + (NOT ZSysop),ZTrue,"V") ' KG022204
IF ZOK THEN _
GOTO 20148
Change RBBSSUB4.BAS as follows:
(line 58700)
SUB RotorsDir (FilName$,SDirAra$(1),MaxSearch,MarkingTime,PassToMacro$) STATIC ' KG022204
ZOK = ZFalse
ZDotFlag = ZFalse
IF MarkingTime THEN _
CALL QuickTPut ("Searching for "+FilName$,0)
IF ZMenuIndex = 6 THEN _
GOTO 58705
NumSearch = 1
WasX = 0
WHILE (NOT ZOK) AND NumSearch <= MaxSearch AND _
SDirAra$(NumSearch) <> ""
IF MarkingTime THEN _
CALL MarkTime (WasX)
WasX$ = SDirAra$(NumSearch) + _
FilName$
CALL FindFile (WasX$,ZOK)
NumSearch = NumSearch + 1
WEND
IF ZOK OR NOT ZFastFileSearch THEN _ ' KG022301
GOTO 58710 ' KG022301
CALL OpenRSeq (ZFastFileList$,HighRec,WasX,18) ' KG022301
IF ZErrCode <> 0 THEN _ ' KG022301
GOTO 58710 ' KG022301
CALL TrimTrail (FilName$,".")
CALL BinSearch (FilName$,1,12,18,HighRec,RecFoundAt, RecFound$)
ZOK = (RecFoundAt > 0)
IF NOT ZOK THEN _ ' KG022301
GOTO 58710 ' KG022301
ZOK = ZFalse
CALL CheckInt (MID$(RecFound$,13,4))
IF ZTestedIntValue < 1 THEN _ ' KG022301
GOTO 58710 ' KG022301
CALL OpenRSeq (ZFastFileLocator$,HighRec,WasX,66)
IF ZErrCode <> 0 OR ZTestedIntValue > HighRec THEN _ ' KG022301
GOTO 58710 ' KG022301
FIELD 2, 66 AS LocatorRec$
GET 2, ZTestedIntValue
WasX$ = LEFT$(LocatorRec$,63)
CALL Trim (WasX$)
IF LEFT$(WasX$,2) = "M!" THEN _
ZOK = ZFalse : _ ' KG022301
ZGSRAra$(1) = PassToMacro$ : _ ' KG022204
WasX$ = RIGHT$(WasX$,LEN(WasX$)-2) : _ ' KG022204
CALL Trim (WasX$) : _ ' KG022204
ZFileLocation$ = "" : _ ' KG022301
CALL MacroExe (WasX$) : _ ' KG022204
IF ZFileLocation$ = "" THEN _ ' KG022301
ZOK = ZFalse : _ ' KG022204
GOTO 58711 _ ' KG022301
ELSE WasX$ = ZFileLocation$ ' KG022301
WasX$ = WasX$ + FilName$ ' KG022301
CALL FindFile (WasX$,ZOK) ' KG022301
GOTO 58710 ' KG022301
59336 ZUserIn$(WasI) = LEFT$(PartToPrint$,INSTR(PartToPrint$," ") - 1)
CALL FindFile (ZPersonalDrvPath$ + ZUserIn$(WasI),ZOK)
IF ZOK THEN _
ZUserIn$(WasI) = ZPersonalDrvPath$ + ZUserIn$(WasI) _
ELSE CALL RotorsDir (ZUserIn$(WasI),ZSubDir$(),ZSubDirCount + _
((ZUserSecLevel < ZMinSecToView) OR _
NOT ZCanDnldFromUp),ZTrue,"D") : _ ' KG022204
GOSUB 59338
RETURN
Change RBBSSUB5.BAS as follows:
20222 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount + _
((ZUserSecLevel < ZMinSecToView) OR _
NOT ZCanDnldFromUp),MarkingTime,"D") ' KG022204
20440 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount,ZTrue,"U") ' KG022204
------------------------[ KG022203 ]-------------------------
Problem: When locally viewing the distributed color graphics
door menu (MENU05C), the colors will bleed over to the right
side of the boundary of the menu. The display looks fine
remotely.
Solution: Replace MENU05C with the new one distributed in
the latest merge file.
------------------------[ KG022202 ]-------------------------
Problem: When installing RBBS-PC for the first time and use
the distributed def file RBBS-PC.DEF, the up and downloads do
not work properly unless RBBS-PC is installed in a subdirectory
called RBBS.
Solution: In CONFIG, change the subdirectory for uploads from
"C:\RBBS\FILES" to "C:FILES", and change the two subdirectories
available for downloading from "C:\RBBS\FILES" to "C:FILES" and
from "C:\RBBS\BULLETINS" to "C:BULLETINS".
These are changed in parameter 208.
------------------------[ KG022201 ]-------------------------
Problem: When doing a directory listing and V)iew archieve,
J)ump is no longer an option after listing resumes.
Solution: Change RBBSSUB3.BAS as follows:
58180 ZTurboKey = -ZTurboKeyUser
ZStackC = ZTrue
CALL AskMore (ExtraPrompt$, ZTrue, ZFalse,AbortIndex,ZFalse)
IF ZSubParm = -1 THEN _
GOTO 58183
IF ZNo THEN _
GOTO 58183
CALL AllCaps (ZUserIn$(1))
IF ZUserIn$(1) = "V" THEN _
ZLastIndex = ZWasQ : _
ZAnsIndex = 1 : _
CALL GetArc : _
ZJumpSupported = ZTrue : _ ' KG022201
ZWasA = UpldIndex : _
GOSUB 58185 : _
UpldIndex = ZWasA : _
GOTO 58180
IF ZUserIn$(1) = "D" THEN _
ZOutTxt$ = "Download what file(s)" : _
ZStackC = ZTrue : _
CALL PopCmdStack : _
IF ZWasQ = 0 THEN _
GOTO 58180
IF ZJumpSearching THEN _
PrevSearch$ = SearchFor$ : _
SearchFor$ = ZJumpTo$ _
ELSE SearchFor$ = SearchString$ : _
IF LEN(ZUserIn$(1)) > 1 THEN _
IF NOT ZYes AND CanDnld THEN _
CALL SkipLine (1) : _
DnldFlag = UpldIndex : _
ZLastIndex = ZWasQ : _
ZAnsIndex = 1 : _
EXIT SUB
IF ZNonStop THEN IF UpldIndex > 999 THEN _
IF (SearchDate$ = "" OR NOT ZExpertUser) THEN _
ZOutTxt$ = STR$(UpldIndex) + _
" lines left to search. Really go non-stop? (Y/[N])" : _
ZNoAdvance = ZTrue : _
ZTurboKey = -ZTurboKeyUser : _
ZSubParm = 1 : _
CALL TGet : _
CALL WipeLine (79) : _
ZNonStop = ZYes
FMSCheckPoint = 0
GOTO 58168
------------------------[ KG022103 ]-------------------------
Problem: LIT merges not assigned security right for new
users.
Solution: Replace the file INDEF.LIT by the new one in the lastest
fix file merges.
------------------------[ KG022102 ]-------------------------
Problem: LIT merge generates a compile error when SURVEY
metavariable is set to OFF.
Solution: Replace the file SURVEY.LIT by the new one in
the latest fix file merges.
------------------------[ KG022101 ]-------------------------
Problem: When door to external protocols, not correctly tracking
bytes downloaded. Caused by misspelled variable names.
Change RBBSSUB3.BAS as follows:
43070 ZActiveMessageFile$ = ZOrigMsgFile$
ZSubParm = 3
CALL FileLock
CALL OpenMsg
FIELD 1, 128 AS ZMsgRec$
GET 1,ZNodeRecIndex
IF ZGlobalSysop THEN _
MID$(ZMsgRec$,1,30) = "SYSOP" + SPACE$(25)
MID$(ZMsgRec$,40,2) = STR$(ZExitToDoors)
MID$(ZMsgRec$,42,2) = STR$(ZEightBit)
MID$(ZMsgRec$,44,2) = STR$(ZBPS)
MID$(ZMsgRec$,46,2) = STR$(ZUpperCase)
MID$(ZMsgRec$,48,5) = MKS$(ZNumDnldBytes!) + MID$(STR$(-ZBatchTransfer),2) ' KG022101
MID$(ZMsgRec$,53,2) = STR$(ZWasGR)
MID$(ZMsgRec$,55,2) = STR$(ZSysop)
MID$(ZMsgRec$,65,3) = CHR$(VAL(LEFT$(ZTimeLoggedOn$,2))) + _
CHR$(VAL(MID$(ZTimeLoggedOn$,4,2))) + _
CHR$(VAL(MID$(ZTimeLoggedOn$,7,2)))
MID$(ZMsgRec$,72,2) = STR$(ZPrivateDoor)
MID$(ZMsgRec$,74,1) = MID$(STR$(ZTransferFunction),2,1)
MID$(ZMsgRec$,75,1) = ZWasFT$
MID$(ZMsgRec$,113,2) = MKI$(CINT(ZTimeCredits!)/60)
MID$(ZMsgRec$,79,8) = LEFT$(ZDooredTo$+" ",8)
MID$(ZMsgRec$,91,2) = STR$(ZReliableMode)
CALL BreakFileName (ZCurPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZFalse)
MID$(ZMsgRec$,93,8) = ZUserIn$ + SPACE$(8 - LEN(ZUserIn$))
MID$(ZMsgRec$,101,2) = STR$(ZLocalUser)
MID$(ZMsgRec$,103,2) = STR$(ZLocalUserMode)
ZConfName$ = LEFT$(ZConfName$,INSTR(ZConfName$ + " "," ") - 1)
MID$(ZMsgRec$,105,8) = ZConfName$ + SPACE$(8 - LEN(ZConfName$))
MID$(ZMsgRec$,115,1) = MID$(STR$(ZAutoLogoffReq),2,1)
MID$(ZMsgRec$,117,2) = STR$(ZMenuIndex)
MID$(ZMsgRec$,119,2) = LEFT$(DATE$,2)
MID$(ZMsgRec$,121,2) = MID$(DATE$,4,2)
MID$(ZMsgRec$,123,2) = RIGHT$(DATE$,2)
MID$(ZMsgRec$,125,2) = LEFT$(TIME$,2)
MID$(ZMsgRec$,127,2) = MID$(TIME$,4,2)
' *** Save additional parameters for door restoral
CALL OpenOutW (ZNodeWorkDrvPath$+"DRST"+ZNodeFileID$+".DEF")
CALL PrintWorkA (STR$(ZLimitMinsPerSession))
CLOSE 2
(line 44000)
SUB ReadProf STATIC
FIELD 1, 128 AS ZMsgRec$
GET 1,ZNodeRecIndex
ZReliableMode = VAL(MID$(ZMsgRec$,91,2))
MID$(ZMsgRec$,40,2) = "00"
ZEightBit = VAL(MID$(ZMsgRec$,42,2))
ZBPS = VAL(MID$(ZMsgRec$,44,2))
CALL CommInfo
ZBaudTest! = VAL(MID$(ZBaudRates$,(-5 * ZBPS),5))
ZUpperCase = VAL(MID$(ZMsgRec$,46,2))
ZNumDnldBytes! = CVS(MID$(ZMsgRec$,48,4)) ' KG022101
ZBatchTransfer = (MID$(ZMsgRec$,52,1) = "1")
ZWasGR = VAL(MID$(ZMsgRec$,53,2))
HourLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,65,1))),2),2)
MinLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,66,1))),2),2)
SecLoggedOn$ = RIGHT$("0"+MID$(STR$(ASC(MID$(ZMsgRec$,67,1))),2),2)
ZTimeLoggedOn$ = HourLoggedOn$ + _
":" + _
MinLoggedOn$ + _
":" + _
SecLoggedOn$
ZTransferFunction = VAL(MID$(ZMsgRec$,74,1))
ZWasFT$ = MID$(ZMsgRec$,75,1)
ZTimeCredits! = 60*CVI(MID$(ZMsgRec$,113,2))
ZDooredTo$ = MID$(ZMsgRec$,79,8)
CALL Trim (ZDooredTo$)
IF ZExitToDoors AND ZDooredTo$ <> "" THEN _
CALL OpenWork (2,ZDoorsDef$) : _
IF ZErrCode = 0 THEN _
CALL ReadParms (ZOutTxt$(),8,1) : _
WHILE ZErrCode = 0 AND ZOutTxt$(1) <> ZDooredTo$ : _
CALL ReadParms (ZOutTxt$(),8,1) : _
WEND : _
IF ZOutTxt$(1) = ZDooredTo$ THEN _
ZDoorSkipsPswd = (ZOutTxt$(6) <> "Y") : _
CALL BufFile (ZOutTxt$(7),WasX)
ZErrCode = 0
ZMenuIndex = VAL(MID$(ZMsgRec$,117,2))
ZCurPUI$ = MID$(ZMsgRec$,93,8)
CALL Remove (ZCurPUI$," ")
IF ZCurPUI$ <> "" THEN _
CALL BreakFileName (ZMainPUI$,ZOutTxt$,ZUserIn$,ZWasZ$,ZTrue) : _
ZCurPUI$ = ZOutTxt$ + ZCurPUI$ + ZWasZ$
ZCustomPUI = (ZCurPUI$ <> "")
ZLocalUser = VAL(MID$(ZMsgRec$,101,2))
ZLocalUserMode = VAL(MID$(ZMsgRec$,103,2))
ZHomeConf$ = MID$(ZMsgRec$,105,8)
ZAutoLogoffReq = (VAL(MID$(ZMsgRec$,115,1)) <> 0)
CALL Trim (ZHomeConf$)
IF ZRequiredRings > 0 AND _
INSTR(ZModemInitCmd$,"S0=255") THEN _
COLOR 7,0,0 _
ELSE COLOR ZFG,ZBG,ZBorder
IF ZLocalUserMode THEN _
GOTO 44003
CALL SetBaud
------------------------[ KG022001 ]-------------------------
Problem: When using autodownload and do not specify an extension,
and default is appended, file name transmitted has no extension.
Solution: Change RBBSSUB5.BAS as follows:
20247 ZWasDF = 0
CALL BreakFileName (ZFileName$,DR$,WasX$,Extension$,ZFalse)
IF ZAutoDownInProgress THEN _
ZOutTxt$ = "Transferring -- " + _
WasX$ + "." + Extension$ : _ ' KG022001
GOSUB 21640 : _
IF ZFileSysParm > 1 THEN _
RETURN
IF INSTR("...WRK.FW .ARC.EXE.COM.OBJ.WKS.LBR.ZIP.PAK.ZOO.LZH.","."+Extension$+".") > 2 OR _
MID$(Extension$,2,1) = "Q" OR _
(ZRequireNonASCII AND Extension$ = "BAS") THEN _
ZWasDF = ZTrue
------------------------[ KG021803 ]-------------------------
Problem: In macro initialization of a variable, value includes the
variable number if a space separates the command and number. Should
not matter whether say "{:=1" or "{:= 1", for example.
Solution: Change RBBSSUB5.BAS as follows:
63362 CALL Trim (WasX$) ' KG021803
CALL CheckInt (WasX$)
WasX = INSTR(WasX$," ")
IF WasX > 0 AND ZTestedIntValue > 0 AND ZTestedIntValue <= ZMaxWorkVar THEN _
ZGSRAra$(ZTestedIntValue) = RIGHT$(WasX$,LEN(WasX$)-WasX) ' KG021803
GOTO 63336
------------------------[ KG021802 ]-------------------------
Problem: When implement macros in the Fast File System, the macros
are executed on more than download requests - including uploads and
file v)iew archive.
Change RBBSSUB2.BAS as follows:
20145 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount + (NOT ZSysop),ZTrue,ZFalse) ' KG021802
IF ZOK THEN _
GOTO 20148
Change RBBSSUB4.BAS as follows:
(line 58700)
SUB RotorsDir (FilName$,SDirAra$(1),MaxSearch,MarkingTime,DoMacro) STATIC ' KG021802
ZOK = ZFalse
ZDotFlag = ZFalse
IF MarkingTime THEN _
CALL QuickTPut ("Searching for "+FilName$,0)
IF ZMenuIndex = 6 THEN _
GOTO 58705
NumSearch = 1
WasX = 0
WHILE (NOT ZOK) AND NumSearch <= MaxSearch AND _
SDirAra$(NumSearch) <> ""
IF MarkingTime THEN _
CALL MarkTime (WasX)
WasX$ = SDirAra$(NumSearch) + _
FilName$
CALL FindFile (WasX$,ZOK)
NumSearch = NumSearch + 1
WEND
IF ZFastFileSearch AND NOT ZOK THEN _
CALL OpenRSeq (ZFastFileList$,HighRec,WasX,18) : _
IF ZErrCode = 0 THEN _
CALL TrimTrail (FilName$,".") : _
CALL BinSearch (FilName$,1,12,18,HighRec,RecFoundAt, RecFound$) : _
ZOK = (RecFoundAt > 0) : _
IF ZOK THEN _
ZOK = ZFalse : _
CALL CheckInt (MID$(RecFound$,13,4)) : _
IF ZTestedIntValue > 0 THEN _
CALL OpenRSeq (ZFastFileLocator$,HighRec,WasX,66) : _
IF ZErrCode = 0 AND ZTestedIntValue <= HighRec THEN _
FIELD 2, 66 AS LocatorRec$ : _
GET 2, ZTestedIntValue : _
WasX$ = LEFT$(LocatorRec$,63) : _
CALL Trim (WasX$) : _
IF LEFT$(WasX$,2) = "M!" THEN _
ZOK = ZFalse : _ ' KG021802
ZDotFlag = ZTrue : _ ' KG021802
IF DoMacro THEN _ ' KG021802
WasX$ = RIGHT$(WasX$,LEN(WasX$)-2) : _
CALL Trim (WasX$) : _
CALL MacroExe (WasX$) : _
ZOK = ZFalse : _ ' KG021802
GOTO 58711 _ ' KG021802
ELSE GOTO 58711 _ ' KG021802
ELSE WasX$ = WasX$ + FilName$ : _
CALL FindFile (WasX$,ZOK)
GOTO 58710
58711 CALL SkipLine (-MarkingTime) ' KG021802
END SUB
59336 ZUserIn$(WasI) = LEFT$(PartToPrint$,INSTR(PartToPrint$," ") - 1)
CALL FindFile (ZPersonalDrvPath$ + ZUserIn$(WasI),ZOK)
IF ZOK THEN _
ZUserIn$(WasI) = ZPersonalDrvPath$ + ZUserIn$(WasI) _
ELSE CALL RotorsDir (ZUserIn$(WasI),ZSubDir$(),ZSubDirCount + _
((ZUserSecLevel < ZMinSecToView) OR _
NOT ZCanDnldFromUp),ZTrue,ZFalse) : _ ' KG021802
GOSUB 59338
RETURN
Change RBBSSUB5.BAS as follows:
20222 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount + _
((ZUserSecLevel < ZMinSecToView) OR _
NOT ZCanDnldFromUp),MarkingTime,ZTrue) ' KG021802
20440 CALL RotorsDir (ZFileName$,ZSubDir$(),ZSubDirCount,ZTrue,ZFalse) ' KG021802
20450 IF Extension$ <> Check$ THEN _
CALL RotorsDir (WasX$ + "." + Check$,ZSubDir$(),ZSubDirCount,ZTrue,ZFalse) : _ ' KG021802
IF ZOK THEN _
GOTO 20452
GOTO 20447
------------------------[ KG021801 ]-------------------------
Problem: internal code documentation for SmartText omits notes
on what command invokes processing.
Change RBBSSUB4.BAS as follows:
58266 SmartHold$ = DATE$ ' DT Date ' KG021801
RETURN
58267 CALL AMorPM
SmartHold$ = ZTime$ ' TM Time ' KG021801
RETURN
------------------------[ KG021502 ]-------------------------
Problem: When restrict a macro to the main prompt, and have a macro
with same name as a conference (to join it), "j <conf>" works but
"fn;ln;pswd;!<conf>" does not. The macro gets substituted for
"<conf>".
Solution: Change RBBS-PC.BAS as follows:
1205 IF ZSubParm < 0 THEN _
GOTO 202
ZSubParm = 1
ZStopInterrupts = ZFalse
ZNonStop = (ZPageLength < 1)
ZWasQ = 0
IF ZHomeConf$ <> "" AND ZHomeConf$ <> "MAIN" THEN _
TurboLogon = (NOT ConfMailJoin) : _
ConfMailJoin = ZFalse : _
ZFF = 8 : _
ZUserIn$(2) = ZHomeConf$ : _
ZHomeConf$ = "" : _
ZWasQ = 1 : _
ZAnsIndex = 1 : _
ZLastIndex = 2 : _
ZStoreParseAt = 1 : _
ZLastCommand$ = "MJ" : _ ' KG021502
GOTO 1240
CALL SkipLine (1)
------------------------[ KG021502 ]-------------------------
Problem: the prompt after a macro ends is repeated twice.
Solution: Change RBBSSUB2.BAS as follows:
1628 CALL VerifyAns
IF NOT ZOK THEN _
CALL QuickTPut1 ("Invalid answer <" + ZUserIn$(1) + ">") : _
GOTO 1500
HoldA$ = ""
ZForceKeyboard = ZFalse
IF ZMacroSave > 0 THEN _
ZGSRAra$(ZMacroSave) = ZUserIn$ : _
ZMacroSave = 0 : _
GOTO 1632
IF (ZDistantTGet > 0) OR (ZMacroTemplate$ <> "") THEN _
CALL WipeLine (38) : _
IF NOT ZNo THEN _
GOTO 1632 _
ELSE ZWasQ = 0 : _
ZMacroTemplate$ = "" : _
ZDistantTGet = 0 : _
ZNo = ZFalse : _
GOTO 1633
IF ZMacroActive THEN _
ZLastIndex = ZWasQ : _
FirstIndex = 1: _
ZMacroActive = NOT EOF(6) : _ ' KG021501
EXIT SUB
IF ZAnsIndex > 255 OR ((NOT InStack) AND INSTR(ZUserIn$,".") > 0) THEN _
EXIT SUB
IF MacroIndex THEN _
MacroIndex = 1 _
ELSE MacroIndex = ZAnsIndex
CALL NoPath (ZUserIn$(MacroIndex),Found)
IF Found THEN _
EXIT SUB
CALL CheckMacro (ZUserIn$(MacroIndex),Found)
IF Found THEN _
ZStoreParseAt = ZAnsIndex : _
GOTO 1525
EXIT SUB
------------------------[ RH021501 ]-------------------------
Problem: autodownload just does not work.
Solution: Change RBBSSUB3.BAS as follows:
20296 CALL FlushCom(ZWasY$) ' CLEAR THE COMM BUFFER OF GARBAGE
IF ZSubParm = -1 THEN _
EXIT SUB
CALL PutCom (ZEscape$+"OD") ' SEND "ALERT" STRING
IF ZSubParm = -1 THEN _
EXIT SUB
IF ZAbort = ZTrue THEN _
GOTO 20306
CALL LPrnt("Sending FILENAME -- ",1)
CALL LPrnt(ZReturnLineFeed$ + CHR$(9),0)
CALL DelayTime (1) ' WAIT 1 SECOND FOR SETUP
'
' SEND ONE CHARACTER AT A TIME
'
CALL BreakFileName (ZUserIn$(ZAnsIndex),WasX$,ZOutTxt$,ZWasY$,ZTrue) ' RH021501
ZOutTxt$ = ZOutTxt$ + ZWasY$ + "=X" ' RH021501
FOR WasX = 1 TO LEN(ZOutTxt$)
CALL PutCom (MID$(ZOutTxt$,WasX,1)) ' SEND 1 CHARACTER
IF ZSubParm = -1 THEN _
EXIT SUB
IF ZAbort = ZTrue THEN _
GOTO 20306
CALL LPrnt(MID$(ZOutTxt$,WasX,1),0) ' DISPLAY IF NEEDED
ZDelay! = TIMER + 10 ' SET MAXIMUM TIME TO WAIT FOR Reply
Char = ZTrue
WHILE Char = -1
CALL CheckTime(ZDelay!, TempElapsed!, 1)
IF TempElapsed! <= 0 THEN _
GOTO 20300 ' IF ZNo ECHO, CANCEL FILENAME Transfer
CALL EofComm (Char)
WEND ' JUMP OUT IF CHARACTER IS RECEIVED
Change RBBSSUB4.BAS as follows:
(line 59400)
SUB LogPDown (PrivateDnld,DwnIndex) STATIC ' RH021501
IF NOT PrivateDnld THEN _
EXIT SUB
ZWasEN$ = ZPersonalDir$
WasBX = &H4
ZSubParm = 9
CALL FileLock
WasL = 36 + ZMaxDescLen + ZPersonalLen
CLOSE 2
IF ZShareIt THEN _
OPEN ZWasEN$ FOR RANDOM SHARED AS #2 LEN=WasL _
ELSE OPEN "R",2,ZPersonalDir$,WasL
FIELD #2,WasL AS PersonalRec$
ZWasA = VAL(MID$(ZUserIn$(0),5 * (DwnIndex - 1) + 1,5)) ' RH021501
GET #2,ZWasA
MID$(PersonalRec$,WasL-2,1) = "!"
PUT #2,ZWasA
CALL UnLockAppend
END SUB
Change RBBSSUB3.BAS as follows:
20296 CALL FlushCom(ZWasY$) ' CLEAR THE COMM BUFFER OF GARBAGE
IF ZSubParm = -1 THEN _
EXIT SUB
CALL PutCom (ZEscape$+"OD") ' SEND "ALERT" STRING
IF ZSubParm = -1 THEN _
EXIT SUB
IF ZAbort = ZTrue THEN _
GOTO 20306
CALL LPrnt("Sending FILENAME -- ",1)
CALL LPrnt(ZReturnLineFeed$ + CHR$(9),0)
CALL DelayTime (1) ' WAIT 1 SECOND FOR SETUP
'
' SEND ONE CHARACTER AT A TIME
'
CALL BreakFileName (ZUserIn$(ZAnsIndex),WasX$,ZOutTxt$,ZWasY$,ZTrue) ' RH021501
ZOutTxt$ = ZOutTxt$ + ZWasY$ + "=X" ' RH021501
FOR WasX = 1 TO LEN(ZOutTxt$)
CALL PutCom (MID$(ZOutTxt$,WasX,1)) ' SEND 1 CHARACTER
IF ZSubParm = -1 THEN _
EXIT SUB
IF ZAbort = ZTrue THEN _
GOTO 20306
CALL LPrnt(MID$(ZOutTxt$,WasX,1),0) ' DISPLAY IF NEEDED
ZDelay! = TIMER + 10 ' SET MAXIMUM TIME TO WAIT FOR Reply
Char = ZTrue
WHILE Char = -1
CALL CheckTime(ZDelay!, TempElapsed!, 1)
IF TempElapsed! <= 0 THEN _
GOTO 20300 ' IF ZNo ECHO, CANCEL FILENAME Transfer
CALL EofComm (Char)
WEND ' JUMP OUT IF CHARACTER IS RECEIVED